#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
const int nx[]={0,0,0,1,-1},ny[]={0,1,-1,0,0};
struct ST{
int x,y;
};
map<int,ST> mp;
int r,c,a[105][105],dp[105][105],ans;
int main(){
cin>>r>>c;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>a[i][j];
mp[a[i][j]].x=i;
mp[a[i][j]].y=j;
}
}
for(int i=1;i<=1000002;i++){
if(mp[i].x!=0){
for(int j=1;j<=4;j++){
int dx=mp[i].x+nx[j];
int dy=mp[i].y+ny[j];
if(a[dx][dy]<a[mp[i].x][mp[i].y]) dp[mp[i].x][mp[i].y]=max(dp[dx][dy],dp[mp[i].x][mp[i].y]);
}
dp[mp[i].x][mp[i].y]++;
}
}
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
ans=max(ans,dp[i][j]);
}
}
cout<<ans;
}