#include <cstdio>
#include <cstring>
#define ref(i,x,y)for(int i=x;i<=y;i++)
#define def(i,x,y)for(int i=x;i>=y;i--)
#define max(a,b)a=a>b?a:b;
int n,m,ans;
int a[1001][1001],f[1001][1001],s[2][1001][1001];
int main()
{
scanf("%d%d",&n,&m);
ref(i,1,n)ref(j,1,m)
scanf("%d",&a[i][j]);
ref(i,1,n)ref(j,1,m)
if(!a[i][j])
{
s[1][i][j]=s[1][i][j-1]+1;
s[0][i][j]=s[0][i-1][j]+1;
}
ref(i,1,n)ref(j,1,m)
if(a[i][j])
{
int p=f[i-1][j-1];
if(p<=s[1][i][j-1]&&p<=s[0][i-1][j])
f[i][j]=f[i-1][j-1]+1;
max(ans,f[i][j]);
}
memset(f,0,sizeof f);
ref(i,1,n)def(j,m,1)
if(a[i][j])
{
int p=f[i-1][j+1];
if(p<=s[1][i][j+p]&&p<=s[0][i-1][j])
f[i][j]=f[i-1][j+1]+1;
max(ans,f[i][j]);
}
printf("%d",ans);
return 0;
}