#include
using namespace std;
int findPool(int mat[][1000],int i,int j,int sum,int n,int m)
{
// cout<<"begin "<<i<<j<<endl;
if(mat[i][j]==0||mat[i][j]==2)
{
return 0;
}
if(i<0||j<0||i>n||j>m)
{
return 0;
}
/* for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<mat[i][j];
}
cout<<endl;
}*/
//cout<<endl;
mat[i][j]=0;
int a =findPool(mat,i+1,j,sum,n,m);
int b=findPool(mat,i-1,j,sum,n,m);
int c=findPool(mat,i,j+1,sum,n,m);
int d=findPool(mat,i,j-1,sum,n,m);
mat[i][j]=2;
//cout<<a+b+c+d+1<<" returning"<<endl;
return a+b+c+d+1;
}
int main()
{
int mat[1000][1000];
int mat1[1000][1000];
int n,m;
cin>>n;
cin>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>mat[i][j];
mat1[i][j]=mat[i][j];
}
}
int max=-1;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(mat[i][j]==0)
{
mat[i][j]=1;
// cout<<i<<" "<<j<<"*****int the main****** ";
int a= findPool(mat,i,j,0,n,m);
// cout<<a<< "the a is"<<endl;
for(int k=0;k<n;k++)
{
for(int l=0;l<m;l++ )
{
mat[k][l]=mat1[k][l];
}
}
if(max<a)
{
max=a;
}
}
}
}
cout<<max;
return 0;
}