#include using namespace std; typedef long long ll; typedef pair P; typedef pair Q; #define REP(i,n) for(int i=0;i> H >> W; vector v; for(i=1;i<=H;i++) for(j=1;j<=W;j++){ cin >> a[i][j]; v.push_back(Q(a[i][j],P(i,j))); } sort(v.begin(),v.end()); map m; REP(i,H*W) m[P(v[i].second.first,v[i].second.second)]=i; vector dp(H*W,1); REP(i,H*W){ int x=v[i].second.first,y=v[i].second.second; int k=m[P(x+1,y)]; if(inside(x+1,y) && a[x+1][y]>a[x][y]) dp[k]=max(dp[k],dp[i]+1); k=m[P(x,y+1)]; if(inside(x,y+1) && a[x][y+1]>a[x][y]) dp[k]=max(dp[k],dp[i]+1); k=m[P(x-1,y)]; if(inside(x-1,y) && a[x-1][y]>a[x][y]) dp[k]=max(dp[k],dp[i]+1); k=m[P(x,y-1)]; if(inside(x,y-1) && a[x][y-1]>a[x][y]) dp[k]=max(dp[k],dp[i]+1); } int ans=1; REP(i,H*W) ans=max(ans,dp[i]); cout << ans << endl; return 0; }