/*
ID: niepeng1
PROG: bigbrn
LANG: C++
*/
/*
这个动态规划,我又没有想出来,干记起来了其实,但是还是写了个O(n^3)的,奇垃圾无比,Shit.
后来换了方法。
方法就是F[i][j],对表示x 0~i y 0~j 内不为树的正方形数目
F[i][j]=minn(F[i-1][j],F[i][j-1],F[i-1][j-1])+1;
啊。
*/
#include <iostream>
using namespace std;
int a[1000][1000];
inline int minn(int x,int y,int z)
{
if(x>y)
x=y;
return x<z?x:z;
}
int main()
{
freopen("bigbrn.in","r",stdin);
freopen("bigbrn.out","w",stdout);
memset(a,1,sizeof(a));
int n,num,x,y,j,i,ans;
scanf("%d%d",&n,&num);
for(i=0;i<num;i++)
{
scanf("%d %d",&x,&y);
a[x-1][y-1]=0;
}
ans=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(a[i][j])
{
if(!(i&&j)) a[i][j]=1;
else a[i][j]=minn(a[i-1][j],a[i][j-1],a[i-1][j-1])+1;
if(ans<a[i][j])
ans=a[i][j];
}
}
printf("%d/n",ans);
return 0;
}