记录
#include<iostream>
#include<algorithm>
using namespace std;
#define R register
#define getchar() (S==TT&&(TT=(S=BB)+fread(BB,1,32768,stdin),TT==S)?EOF:*S++)
char BB[32768],*S=BB,*TT=BB;
inline int in(){
R int x=0;R bool f=0;R char c;for(;(c=getchar())<'0'||c>'9';f=c=='-');
for(x=c-'0';(c=getchar())>='0'&&c<='9';x=(x<<3)+(x<<1)+c-'0');return f?-x:x;
}
int main(){
ios::sync_with_stdio(0);
int a[10005], f[10005], d[5],r=in(), c=in(), n; pair<int,int>b[10005];
n=r*c, d[1]=-c, d[2]=c, d[3]=-1, d[4]=1;
for(R int i=1; i<=n; ++i)
a[i] = b[i].first = in(), b[i].second=i;
sort(b+1, b+n+1);
for(R int i=1,s; i<=n; ++i){
f[s=b[i].second] = 1;
for(R int j=1,v; j<=4; ++j)
v = s + d[j],
v>0 && v<=n && a[v]<a[s] && (f[s] = max(f[s], f[v]+1));
}
c=1; for(R int i=1; i<=n; ++i)c = max(c,f[i]);
cout << c;return 0;
}