#include<bits/stdc++.h>
using namespace std;
int y[1500][1500],x[150][150],r,c,maxn=-1;
int dfs(int i,int j,int cnt){
if(y[i][j]!=0)return y[i][j];
y[i][j]=1;
if(x[i+1][j]<x[i][j]&&i>=1&&j>=1&&i<r&&j<=c){
y[i][j]=max(y[i][j],dfs(i+1,j,cnt+1));
}
if(x[i][j+1]<x[i][j]&&i>=1&&j>=1&&i<=r&&j<c){
y[i][j]=max(y[i][j],dfs(i,j+1,cnt+1));
}
if(x[i-1][j]<x[i][j]&&i>=2&&j>=1&&i<=r&&j<=c){
y[i][j]=max(y[i][j],dfs(i-1,j,cnt+1));
}
if(x[i][j-1]<x[i][j]&&i>=1&&j>1&&i<=r&&j<=c){
y[i][j]=max(y[i][j],dfs(i,j-1,cnt+1));
}
maxn=max(maxn,cnt);
}
int main(){
cin>>r>>c;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>x[i][j];
}
}
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
dfs(i,j,1);
}
}
cout<<maxn;
return 0;
}