#include <bits/stdc++.h>
using namespace std;
int ar[109][109]={0};
int f[109][109]={0};
bool flag[109][109]={0};
int x[]={0,0,-1,1};
int y[]={-1,1,0,0};
int n,m;
int dfs(int i,int j,int sum){
if(i<0||j<0||i>=n||j>=m||flag[i][j]){
return sum;
}
if(f[i][j]!=INT_MIN){
return f[i][j];
}
int Max=0;
for(int k=0;k<4;k++){
if(ar[i][j]>ar[i+x[i]][j+y[i]]){
flag[i][j]=1;
Max=max(Max,dfs(i+x[k],j+y[k],sum+1));
flag[i][j]=0;
}
}
f[i][j]=Max;
return Max;
}
int main(){
cin >> n >> m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin >> ar[i][j];
f[i][j]=INT_MIN;
}
}
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
f[i][j]=dfs(i,j,0);
ans=max(ans,f[i][j]);
}
}
cout << ans;
return 0;
}