#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int ma;
int m,n;
int ve[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
void solve(int ni,int nj,int nstep,int isice[100][100]){
    isice[ni][nj]=0;
    bool is=false;
    for(int i=0;i<4;i++){
        int newi=ni+ve[i][0],newj=nj+ve[i][1];
        if(0<=newi&&newi<n&&0<=newj&&newj<m&&isice[newi][newj]!=0){
            solve(ni+ve[i][0],nj+ve[i][1],nstep+1,isice);
            is=true;
        }
    }
    isice[ni][nj]=1;
    if(!is)ma=max(nstep,ma);
}
int main(){
    for(;;){
        scanf("%d%d",&m,&n);
        if(m==0&&n==0)break;
        int isice[100][100];
        for(int i=0;i<n;i++)for(int j=0;j<m;j++)scanf("%d",&isice[i][j]);
        ma=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(isice[i][j]!=0)solve(i,j,1,isice);
            }
        }
        printf("%d\n",ma);
    }
}