#include<stdio.h>

bool map[ 92 ][ 92 ] ;

int mx[] = { 0 ,1 ,-1 ,0 } ;
int my[] = { 1 ,0 ,0 ,-1 } ;

int ans ;

int move( int y ,int x ,int cnt )
{
	map[ y ][ x ] = false ;

	if( cnt > ans )
	{
		ans = cnt ;
	}

	for( int i = 0 ; i < 4 ; i++ )
	{
		int yy = y + my[ i ] ;
		int xx = x + mx[ i ] ;

		if( map[ yy ][ xx ] == true )
		{
			move( yy ,xx ,cnt + 1 )	;
		}
	}

	map[ y ][ x ] = true ;

	return ans ;
}



int main()
{
	int h ,w ;

	while( true )
	{
		scanf( "%d %d" ,&h ,&w ) ;

		if( w == h && !w )
		{
			return 0 ;
		}

		ans = 0 ;

		for( int i = 1 ; i <= h ; i++ )
		{
			for( int j = 1 ; j <= w ; j++ )
			{
				scanf( "%d" ,&map[ i ][ j ] ) ;
			}
		}

		for( int i = 1 ; i <= h ; i++ )
		{
			for( int j = 1 ; j <= w ; j++ )
			{
				if( map[ i ][ j ] == 1 )
				{
					int ans_ = move( i ,j ,1 ) ;
					ans = ans < ans_ ? ans_ : ans ;
				}
			}
		}

		printf( "%d\n" ,ans ) ;
	}
}