long long value(int r, int c);

    int get(int r, int c, std::vector<std::vector<int> > &p) {
        if (p[r][c]) {
            return p[r][c];
        } else {
            p[r][c] = value(r, c);
            return p[r][c];
        }
    }

    std::pair<int, int> find_locmin_point(int N, int M) {
        std::vector<std::vector<int> > p(N + 1, std::vector<int> (M + 1));
        int i = 1;
        int j = 1;
        while (true) {
            if (i + 1 <= N) {
                if (get(i + 1, j, p) < get(i, j, p)) {
                    i++;
                }
            }

            if (j + 1 <= M) {
                if (get(i, j + 1, p) < get(i, j, p)) {
                    j++;
                }
            }

            if (i - 1 > 0) {
                if (get(i - 1, j, p) < get(i, j, p)) {
                    i--;
                }
            }

            if (j - 1 > 0) {
                if (get(i, j - 1, p) < get(i, j, p)) {
                    j--;
                }
            }
        }
        return {i, j};
    }