#include using namespace std; #define rep(i,n) for(int i=0;i=0;i--) #define rng(i,c,n) for(int i=c;i #define _4c5UlRw ios::sync_with_stdio(0),cin.tie(0) typedef long long ll; typedef vector vi; typedef pair pii; void print(){cout<<'\n';} template void print(const h&v,const t&...u){cout<>h>>w; const int n=h*w; vec(vi) a(h,vi(w)); rep(i,h){ rep(j,w){ cin>>a[i][j]; } } vi tmp; rep(i,h){ rep(j,w){ tmp.pb(a[i][j]); } } sort(all(tmp)); tmp.erase(unique(all(tmp)),tmp.end()); const int si=sz(tmp); const int di[]={1,-1,0,0}; const int dj[]={0,0,1,-1}; auto ok=[&](int i,int j)->int{ return min(i,j)>=0 and i>q; vec(array) qry; rep(i,q){ int si,sj,ti,tj; cin>>si>>sj>>ti>>tj; si-=1,sj-=1,ti-=1,tj-=1; qry.pb({si,sj,ti,tj}); } vi pns(q); vi qsl(q),qsr(q,si-1); vec(vi) adqry(si); rep(_,20){ bool fnd=0; rep(i,q){ if(qsl[i]<=qsr[i]){ fnd=1; int md=(qsl[i]+qsl[i])/2; adqry[md].pb(i); } } if(!fnd) break; dsu uf(n); rep(i,si){ for(auto [u,v]:es[i]){ // if(!i) print(u,v); uf.merge(u,v); } for(auto id:adqry[i]){ auto [si,sj,ti,tj]=qry[id]; int u=si*w+sj,v=ti*w+tj; if(uf.same(u,v)){ pns[id]=i; qsr[id]=i-1; }else{ qsl[id]=i+1; } } adqry[i].clear(); } } rep(i,q){ cout<