#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>

using namespace std;

#define rep(i,n) for(int i=0;i<n;i++)
#define reps(i,n) for(int i=1;i<=n;i++)
#define sint(i) scanf("%d",&i);
#define sintt(i,j) scanf("%d%d",&i,&j);
#define sinttt(i,j,k) scanf("%d%d%d",&i,&j,&k);


int n,m;
int maxi;

int masu[100][100];

int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};

void saiki(int x,int y,int cont){
	
	if(x<0||y<0||x>=n||y>=m||masu[x][y]==0){
		maxi=max(maxi,cont);
		return;
	}
	
	masu[x][y]=0;
	rep(i,4){
		saiki(x+dx[i],y+dy[i],cont+1);
	}
	masu[x][y]=1;
}

int main(){
	while(1){
		sintt(n,m);
		if(n==0)break;
		rep(i,m){
			rep(j,n){
				sint(masu[j][i]);
			}
		}
		
		maxi=0;
		rep(i,m){
			rep(j,n){
				saiki(i,j,0);
			}
		}
		printf("%d\n",maxi);
	}
}