Problem: Golu is given a task of clearing coins fallen down  on floor. Naughty being his modus operandi, he thought of playing a game while clearing coins. He arranges the coins like an M X N matrix with random heads (1) and tails (0).

In every move, he chooses a sub-matrix of size L X B [such that max(L,B) >1] and interchanges all heads to tails and vice-versa present in the chosen sub-matrix. Then if he finds a 2X2 sub-matrix exclusively of heads anywhere in the M X N matrix, he removes those coins.

Your task is simple. You have to report the minimum no. of moves taken by him before he clears his first 2X2 sub-matrix.

Input:

Your first line of input consists of two numbers M, N. Each of the next M lines consists of N space-separated integers which are either 0 or 1.

Output:

Output a single line answer giving the minimum no. of steps taken before his first clearance. If it is impossible for him to do so, print "-1" (quotes for clarity).

Constraints :

2 ≤ M,N ≤ 10

Author : Srinivas

Testers : Shubham Parekh , Shreyans

(By IIT Kgp HackerEarth Programming Club)

SAMPLE INPUT
2 4
0 0 1 1
0 0 1 1

SAMPLE OUTPUT
0

Solution (in PYTHON):

Solution:
import sys
M,N = str(raw_input()).split()
M,N = [int(M), int(N)]
data = [[0]*N]*M
for m in range(M):
	data[m] = str(raw_input()).split()
	data[m] = [int(data[m][n]) for n in range(N)]
if M == 2 and N == 2:
	c1 = data[0].count(1)
	c2 = data[1].count(1)
	if c1+c2 == 4:
		print "0"
	elif c1+c2 == 3 or c1+c2 == 1:
		print "-1"
	elif (data[0][0] == 1 and data[1][1] == 1) or (data[0][1] == 1 and data[1][0] == 1):
		print "2"
	else:
		print "1"
else:
	maskval = [[0]*(N-1)]*(M-1)
	p = 3
	for i in range(M-1):
		for j in range(N-1):
			maskval[i][j] = data[i][j] + data[i][j+1] + data[i+1][j] + data[i+1][j+1]
			if maskval[i][j] == 4:
				print "0"
				sys.exit()
			elif maskval[i][j] == 3:
				if ((data[i][j] == 0 and (i != 0 or j != 0)) or \
				(data[i][j+1] == 0 and (i != 0 or j+1 != N-1)) or \
				(data[i+1][j] == 0 and (i+1 != M-1 or j != 0)) or \
				(data[i+1][j+1] == 0 and (i+1 != M-1 or j+1 != N-1))):
					p = min(1,p)
				else:
					p = min(2,p)
			elif maskval[i][j] == 2:
				if (data[i][j] == 1 and data[i+1][j+1] == 1) or (data[i][j+1] == 1 and data[i+1][j] == 1):
					p = min(2,p)
				else:
					p = min(1,p)
			elif maskval[i][j] == 0:
				p = min(1,p)
			else:
				p = min(2,p)
	print p