#include<iostream>
using namespace std;
int N,M;
int A[200][100][100];
int ex[40404];
int tm;
bool ise(int a)
{
	if(ex[a]<tm)
	{
		ex[a]=tm;
		return true;
	}
	else return false;
}
bool f(int K)
{
	tm=0;
	for(int i=0;i<40404;i++)ex[i]=0;
	for(int i=0;i<M;i++)for(int j=i+1;j<M;j++)
	{
		for(int I=0;I<2*N+2;I++)for(int J=0;J<2*N+2;J++)
		{
			tm++;
			int cnt=0;
			if(I<N)for(int k=0;k<N;k++)cnt+=ise(A[i][I][k]);
			else if(I<2*N)for(int k=0;k<N;k++)cnt+=ise(A[i][k][I-N]);
			else if(I==2*N)for(int k=0;k<N;k++)cnt+=ise(A[i][k][k]);
			else for(int k=0;k<N;k++)cnt+=ise(A[i][N-k-1][k]);
			if(J<N)for(int k=0;k<N;k++)cnt+=ise(A[j][J][k]);
			else if(J<2*N)for(int k=0;k<N;k++)cnt+=ise(A[j][k][J-N]);
			else if(J==2*N)for(int k=0;k<N;k++)cnt+=ise(A[j][k][k]);
			else for(int k=0;k<N;k++)cnt+=ise(A[j][N-k-1][k]);
			if(cnt<=K)return true;
		}
	}
	return false;
}
main()
{
	cin>>N>>M;
	for(int i=0;i<M;i++)for(int j=0;j<N;j++)for(int k=0;k<N;k++)cin>>A[i][j][k];
	int L=N-1,R=2*N;
	while(R-L>1)
	{
		if(f((L+R)/2))R=(L+R)/2;
		else L=(L+R)/2;
	}
	cout<<L<<endl;
}