#include <bits/stdc++.h>
#include "locmin.h"
std::pair<int, int> find_locmin_point(int n, int m) {
    int sus = 1, jos = n;
    int st = 1, dr = m;
    int mij;

    while(sus <= jos && st <= dr) {
        if(jos - sus >= dr - st) {
            mij = sus + (jos - sus) / 2;

            long long mi = LLONG_MAX, col = -1;

            for(int val, c = st; c <= dr; c++) {
                val = value(mij, c);
                if(mi > val) {
                    mi = val;
                    col = c;
                }
            }

            bool okSus = (1 > mij - 1 || mi < value(mij - 1, col));
            bool okJos = (n < mij + 1 || mi < value(mij + 1, col));

            if(okSus && okJos) return {mij, col};
            else if(!okSus) jos = mij - 1;
            else            sus = mij + 1;
        }
        else {
            mij = st + (dr - st) / 2;

            long long mi = LLONG_MAX, lin;
            for(int val, l = sus; l <= jos; l++) {
                val = value(l, mij);
                if(mi > val) {
                    mi = val;
                    lin = l;
                }
            }

            bool okSt = (1 > mij - 1 || mi < value(lin, mij - 1));
            bool okDr = (n < mij + 1 || mi < value(lin, mij + 1));
            if(okSt && okDr) return {lin, mij};
            else if(!okSt) dr = mij - 1;
            else           st = mij + 1;
        }
    }

    return {sus, st};
}