#include<iostream>
using namespace std;
int r,c;
int snow[114][114];
int step[114][114];
bool vis[114][114];
int tox[4]={0,0,-1,1};
int toy[4]={1,-1,0,0};
int maxn;
int maxnn=-1e9;
void dfs(int x,int y,int ans)
{
for(int i=0;i<4;i++)
{
int xx=x+tox[i];
int yy=y+toy[i];
if(snow[xx][yy]>=snow[x][y]||xx==0||yy==0) continue;
if(step[xx][yy])
{
maxn=max(maxn,step[xx][yy]+ans);
continue;
}
if(xx&&yy)
{
dfs(xx,yy,ans+1);
}
}
maxn=max(maxn,ans);
return;
}
int main()
{
cin>>r>>c;
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
cin>>snow[i][j];
}
}
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
maxn=-1e9;
dfs(i,j,1);
step[i][j]=maxn;
if(maxnn<maxn) maxnn=maxn;
}
}
cout<<maxnn;
return 0;
}