#include<bits/stdc++.h>
using namespace std;
int n,m,a[105][105],f[105][105];
int dfs(int x,int y){
if(x>n || x<1 || y>m || y<1) return 0;
if(f[x][y]!=-1) return f[x][y];
int ans=0;
if(a[x][y]>a[x][y+1]) ans=max(ans,dfs(x,y+1));
if(a[x][y]>a[x][y-1]) ans=max(ans,dfs(x,y-1));
if(a[x][y]>a[x+1][y]) ans=max(ans,dfs(x+1,y));
if(a[x][y]>a[x-1][y]) ans=max(ans,dfs(x-1,y));
return f[x][y]=ans+1;
}
signed main(){
scanf("%d%d",&n,&m);
sizeof(f,-1,sizeof(f));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ans=max(ans,dfs(i,j));
printf("%d",ans);
return 0;
}