Let's assume that we are given a matrix *b* of size *x* × *y*, let's determine the operation of mirroring matrix *b*. The mirroring of matrix *b* is a 2*x* × *y* matrix *c* which has the following properties:
 -  the upper half of matrix *c* (rows with numbers from 1 to *x*) exactly matches *b*; -  the lower half of matrix *c* (rows with numbers from *x* + 1 to 2*x*) is symmetric to the upper one; the symmetry line is the line that separates two halves (the line that goes in the middle, between rows *x* and *x* + 1). 
Sereja has an *n* × *m* matrix *a*. He wants to find such matrix *b*, that it can be transformed into matrix *a*, if we'll perform on it several (possibly zero) mirrorings. What minimum number of rows can such matrix contain?
The first line contains two integers, *n* and *m* (1 ≤ *n*, *m* ≤ 100). Each of the next *n* lines contains *m* integers — the elements of matrix *a*. The *i*-th line contains integers *a*<sub class="lower-index">*i*1</sub>, *a*<sub class="lower-index">*i*2</sub>, ..., *a*<sub class="lower-index">*im*</sub> (0 ≤ *a*<sub class="lower-index">*ij*</sub> ≤ 1) — the *i*-th row of the matrix *a*.
from sys import stdin ,stdout
from os import path
rd = lambda:stdin.readline().strip()
wr = stdout.write
if(path.exists('input.txt')):
    stdin = open("input.txt","r")
import time ,math
#------------------------------------
x,y = map(int,rd().split())
mylist = []
for _ in range(x):
	mylist.append(''.join(map(str,rd().split())))
if x % 2 != 0 :
	print(x)
else:
	n = 2
	flag = False
	j = 0  
	wrong = False
	out = x
	while n <= x//2:
		wrong = False
		if x % n == 0 :
			for i in range(0,x,n):	
				if flag == False:
					j = 0
					for k in range(i,i+n):
						if mylist[k] != mylist[j]:
							wrong = True
							break
						j+=1
					flag = True
				else:
					j = n-1
					for k in range(i,i+n):
						if mylist[k] != mylist[j]:
							wrong = True
							break
						j-=1
					flag = False

				if wrong == True :
					break
			if wrong != True:
				out = n
				break

		n+=1
	print(out)
