#include<iostream>
using namespace std;
struct point
{
int x;
int y;
};
int n,m;
int max1=0;
int graph[10][10];
int mark[10][10]={0};
void getlen(int x,int y,int len)
{
int flag=0;
if(x-1>=0 && mark[x-1][y]!=1)
{
if(graph[x-1][y] < graph[x][y])
{
mark[x-1][y]=1;
getlen(x-1,y,len+1);
mark[x-1][y]=0;
flag=1;
}
}
if(x+1<n && mark[x+1][y]!=1)
{
if(graph[x+1][y] < graph[x][y])
{
mark[x+1][y]=1;
getlen(x+1,y,len+1);
mark[x+1][y]=0;
flag=1;
}
}
if(y-1>=0 && mark[x][y-1]!=1)
{
if(graph[x][y-1] < graph[x][y])
{
mark[x][y-1]=1;
getlen(x,y-1,len+1);
mark[x][y-1]=0;
flag=1;
}
}
if(y+1<m && mark[x][y+1]!=1)
{
if(graph[x][y+1] < graph[x][y])
{
mark[x][y+1]=1;
getlen(x,y+1,len+1);
mark[x][y+1]=0;
flag=1;
}
}
if(!flag)
{
if(len > max1)
max1 = len;
return ;
}
}
int main()
{
int i,j;
cin>>n>>m;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
cin>>graph[i][j];
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
getlen(i,j,1);
}
cout<<max1<<endl;
}