#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;
}