#include <stdio.h>
#include <string.h>
int n, m;
int direction[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
int dfs_path(int heigh_1[][m], int dp[][m], int i, int j) {
if (dp[i][j] != 0) {
return dp[i][j];
}
int max_length = 1;
for (int k = 0; k < 4; k++) {
int x = i + direction[k][0];
int y = j + direction[k][1];
if (x >= 0 && x < n && y >= 0 && y < m && heigh_1[x][y] < heigh_1[i][j]) {
int cur = dfs_path(heigh_1, dp, x, y);
if (cur + 1 > max_length) {
max_length = cur + 1;
}
}
}
dp[i][j] = max_length;
return dp[i][j];
}
int main() {
scanf("%d %d", &n, &m);
int height[n][m];
int dp[n][m];
int res = 0;
for (int i = 0 ; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &height[i][j]);
}
}
memset(dp, 0, sizeof(dp));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int path = dfs_path(height, dp, i, j);
if (path > res) {
res = path;
}
}
}
printf("%d", res);
return 0;
}