/*
#include<stdio.h>
int k,n,arr[10001];
int memo[100001]={},check[100001]={};
int pivo(int m)
{
if(check[m]==1) return memo[m];
check[m]=1;
return memo[m]=(pivo(m-1)-pivo(m-k-1)+pivo(m-1)+100007)%100007;
}
int main()
{
int i;
scanf("%d %d",&k,&n);
for(i=1;i<=k;i++)
{
scanf("%d",&arr[i]);
memo[i]=arr[i];
check[i]=1;
memo[k+1]+=arr[i];
}
check[k+1]=1;
printf("%d",pivo(n));
return 0;
}
*/
/*
#include<stdio.h>
int queue[201]={};
int front=0,rear=0;
void pull()
{
int i;
for(i=front;i<rear;i++)
{
queue[i-front]=queue[i];
}
front=0;
rear-=front;
}
void push(int n)
{
queue[rear]=n;
rear++;
if(rear==201) pull();
}
void pop()
{
if(front==rear) return;
front++;
if(rear==201) pull();
}
void front1()
{
if(front==rear){
printf("-1\n");
return;
}
printf("%d\n",queue[front]);
}
void back()
{
if(front==rear){
printf("-1\n");
return;
}
printf("%d\n",queue[rear-1]);
}
void size()
{
printf("%d\n",rear-front);
}
void empty()
{
if(front==rear) printf("true\n");
else printf("false\n");
}
int main()
{
int n,i,j;
char a[15]={};
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
gets(a);
if(a[1]=='u'){
int temp=0;
for(j=6;j<=strlen(a)-3;j++)
{
temp*=10;
temp+=a[j]-'0';
}
push(temp);
}
else if(a[0]=='f'){
front1();
}
else if(a[0]=='e'){
empty();
}
else if(a[0]=='s'){
size();
}
else if(a[0]=='b'){
back();
}
else if(a[1]=='o'){
pop();
}
}
return 0;
}
*/
/*
#include<stdio.h>
int queue[201]= {};
int front=0,rear=0;
void pull()
{
int i;
for(i=front; i<rear; i++)
{
queue[i-front]=queue[i];
}
front=0;
rear-=front;
}
void push1(int k,int n)
{
int i;
rear++;
for(i=rear-2; i>=k; i--)
{
queue[i+1]=queue[i];
}
queue[k]=n;
}
void push(int n)
{
int i;
if(front==rear)
{
queue[rear]=n;
rear++;
}
else if(queue[rear-1]>=n){
queue[rear]=n;
rear++;
}
else
{
for(i=front; i<rear; i++)
{
if(queue[i]>=n) continue;
else if(queue[i]<n)
{
push1(i,n);
break;
}
}
}
if(rear==201) pull();
}
void pop()
{
if(front==rear) return;
front++;
if(rear==201) pull();
}
void top()
{
if(front==rear)
{
printf("-1\n");
return;
}
printf("%d\n",queue[front]);
}
void size()
{
printf("%d\n",rear-front);
}
void empty()
{
if(front==rear) printf("true\n");
else printf("false\n");
}
int main()
{
int n,i,j;
char a[15]= {};
scanf("%d\n",&n);
for(i=0; i<n; i++)
{
gets(a);
if(a[1]=='u')
{
int temp=0;
for(j=6; j<=strlen(a)-3; j++)
{
temp*=10;
temp+=a[j]-'0';
}
push(temp);
}
else if(a[0]=='t')
{
top();
}
else if(a[0]=='e')
{
empty();
}
else if(a[0]=='s')
{
size();
}
else if(a[1]=='o')
{
pop();
}
}
return 0;
}
*/
/*
#include<stdio.h>
int arr[32][32]= {},check_east[32][32]= {},check_south[32][32]= {},x,y;
int count=0;
void dfs_east(int i, int j, int ct)
{
if(check_east[i][j]!=0) return;
check_east[i][j]=1;
if(arr[i][j+1]==1&&check_east[i][j+1]==0)
{
dfs_east(i,j+1,ct+1);
}
else
{
if(ct!=0)
{
count++;
}
else
{
check_east[i][j]=0;
}
return;
}
}
void dfs_south(int i,int j,int ct)
{
if(check_south[i][j]!=0) return;
check_south[i][j]=1;
if(arr[i+1][j]==1&&check_south[i+1][j]==0)
{
dfs_south(i+1,j,ct+1);
}
else
{
if(ct!=0)
{
count++;
}
else
{
check_south[i][j]=0;
}
return;
}
}
int main()
{
int i,j;
char a[33]={};
scanf("%d %d",&x,&y);
for(i=1; i<=y; i++)
{
scanf("%s",a);
for(j=1; j<=x; j++)
{
arr[i][j]=a[j-1]-'0';
}
}
for(i=1; i<=y; i++)
{
for(j=1; j<=x; j++)
{
if(arr[i][j]==1)
{
dfs_east(i,j,0);
dfs_south(i,j,0);
}
}
}
printf("%d",count);
return 0;
}
*/
/*
void print()
{
int i,j;
for(i=1; i<=y; i++)
{
for(j=1; j<=x; j++)
{
printf("%d ",check_east[i][j]);
}
printf("\n");
}
printf("\n");
for(i=1; i<=y; i++)
{
for(j=1; j<=x; j++)
{
printf("%d ",check_south[i][j]);
}
printf("\n");
}
printf("\n");
for(i=1; i<=y; i++)
{
for(j=1; j<=x; j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
*/
#include<stdio.h>
int x,y,max=0,arr[32][32]={},check[32][32]={};
int dfs(int n,int m)
{
if(check[n][m]!=0||arr[n][m]==-1||arr[n][m]==1||arr[n][m]==2) return 0;
check[n][m]=1;
return dfs(n+1,m)+dfs(n,m+1)+1;
}
int main()
{
int i,j;
char a[32]={};
scanf("%d %d",&x,&y);
for(i=1;i<=y;i++)
{
scanf("%s",a);
for(j=1;j<=x;j++)
{
arr[i][j]=a[j-1]-'0';
}
}
for(i=0;i<=y+1;i++)
{
for(j=0;j<=x+1;j++)
{
if(i==0||j==0||i==y+1||j==x+1){
arr[i][j]=-1;
}
}
}
for(i=1;i<=y;i++)
{
for(j=1;j<=x;j++)
{
if(arr[i][j]==0){
int temp=dfs(i,j);
if(temp>=max) max=temp;
}
}
}
printf("%d",max);
return 0;
}