#include "locmin.h"
#include "bits/stdc++.h"
using std::vector;
using std::min;
using std::map;

map<std::pair<int,int>,long long>mp;
long long ask(int i,int j){
	if(mp.count({i,j}))return mp[{i,j}];
	return mp[{i,j}]=value(i,j);
}

std::pair <int, int> find_locmin_point(int N, int M) {
	if(N==1){
		if(M==1)return {1,1};
		if(M==2){
			if(value(1,1)<value(1,2))
				return {1,1};
			return {1,2};
		}else if(M==3){
			int a=value(1,1);
			int b=value(1,2);
			int c=value(1,3);
			if(a<b)return {1,1};
			if(c<b)return {1,3};
			return {1,2};
		}
		long long a=value(1,1);
		long long b=value(1,2);
		long long c=value(1,M-1);
		long long d=value(1,M);
		if(b>a)return {1,1};
		if(c>d)return {1,M};
		int bs=-1;
		for(int l=2,r=M;l<=r;){
			int mi=(l+r)>>1;
			if(value(1,mi-1)<value(1,mi)){
				bs=mi-1,r=mi-1;
			}
			else l=mi+1;
		}
		return {1,bs};
	}else{
		vector<vector<long long>>v(N,vector<long long>(M));
		for(int i=1;i<=N;i++)
			for(int j=1;j<=M;j++){
				v[i-1][j-1]=ask(i,j);
				//v[N-i][j-1]=ask(N-i+1,j);
			}
		/*
		for(int i=1;i<=N;i++)
			for(int j=1;j<=2;j++){
				v[i-1][j-1]=ask(i,j);
				v[i-1][N-j]=ask(i,N-j+1);
			}
			*/
		for(int i=0;i<N;i++)
			for(int j=0;j<M;j++){
					int dx[]={-1,0,0,1};
					int dy[]={0,-1,1,0};
					long long mn=LLONG_MAX;
					for(int k=0;k<4;k++){
						int ti=i+dx[k],tj=j+dy[k];
						if(0<=ti&&ti<N&&0<=tj&&tj<M)
							mn=min(mn,v[ti][tj]);
					}
					if(mn>v[i][j])return{i+1,j+1};
				}
		return {1,1};
	}
}
