#include<stdio.h>
bool used[90][90];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int m,n;
int max(int a,int b){return a>b?a:b;}
int dfs(int y,int x){
	used[y][x]=true;
	int ma=0;
	int i;
	for(i=0;i<4;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx>=0&&nx<m&&ny>=0&&ny<n&&!used[ny][nx])ma=max(ma,dfs(ny,nx));
	}
	used[y][x]=false;
	return ma+1;
}
int main(){
	while(1){
	scanf("%d",&m);
	if(m==0)return 0;
	scanf("%d",&n);
	int i,j;
	for(i=0;i<n;i++)for(j=0;j<m;j++)used[i][j]=false;
	for(i=0;i<n;i++){
		for(j=0;j<m;j++){
			int x;
			scanf("%d",&x);
			if(x==0)used[i][j]=true;
		}
	}
	int ans=0;
	for(i=0;i<n;i++){
		for(j=0;j<m;j++){
			if(!used[i][j])ans=max(ans,dfs(i,j));
		}
	}
	printf("%d\n",ans);
	}
}
	