#1 #2 WA,均少一
#include<bits/stdc++.h>
using namespace std;
int h[102][102];
int dp[102][102];
struct Node{
int x,y,w;
}a[10005];
int p1[4]={1,-1,0,0},p2[4]={0,0,1,-1};
bool cmp(Node x1,Node x2){
return x1.w>x2.w;
}
int main(){
int r,c;
scanf("%d%d",&r,&c);
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
scanf("%d",&h[i][j]);
a[(i-1)*r+j]={i,j,h[i][j]};
}
}
sort(a+1,a+r*c+1,cmp);
for(int i=1;i<=r*c;i++){
int js=0;
for(int j=0;j<4;j++){
if(h[a[i].x][a[i].y]<h[a[i].x+p1[j]][a[i].y+p2[j]]){
js=max(js,dp[a[i].x+p1[j]][a[i].y+p2[j]]);
}
}
dp[a[i].x][a[i].y]=++js;
}
int ans=0;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
ans=max(ans,dp[i][j]);
}
}
printf("%d",ans);
return 0;
}