#include<bits/stdc++.h>
using namespace std;

int h,w;
int maps[100][100];
int check[100][100];
int ans=0;
int dy[4]={-1,0,1,0};
int dx[4]={0,-1,0,1};

void solve(int y,int x,int cnt){
  if(ans<cnt)ans=cnt;
  for(int i=0;i<4;i++){
    int ny=y+dy[i];
    int nx=x+dx[i];
    if(maps[ny][nx]==1 && check[ny][nx]==-1  && ny>=0 && ny<h && nx>=0 && nx<w){
      check[ny][nx]=1;
      solve(ny,nx,cnt+1);
      check[ny][nx]=-1;
    }
  }
    return;
}
int main(){
  while(1){
  cin>>w>>h;
  ans=0;
  if(!(w || h))break;
  memset(maps,0,sizeof(maps));
  for(int i=0;i<h;i++){
    for(int j=0;j<w;j++){
      cin>>maps[i][j];
    }
  }
  for(int i=0;i<h;i++){
    for(int j=0;j<w;j++){
      if(maps[i][j]==1){
	memset(check,-1,sizeof(check));
	check[i][j]=1;
	solve(i,j,1);
      }
    }
  }
  cout<<ans<<endl;
  }
}