#include using std::cin; using std::cout; using std::vector; using ll=long long; #define endl "\n"; const int inf=1<<30; //セグ木 struct Segtree{ int N; vector node; Segtree(int n){ N=1; while(N=r||right<=l) return -inf; if(left<=l&&r<=right) return node[now]; return std::max(Query(left,right,now*2+1,l,(l+r)/2),Query(left,right,now*2+2,(l+r)/2,r)); } }; int main(){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); //入力、宣言 int N; cin>>N; vector> data; //data[i].second が 0 以下なら座標を、1 以上ならクエリを表す for(int i=0;i>X; data.push_back(std::make_pair(X,-i)); } int Q; cin>>Q; vector l(Q),r(Q); for(int i=0;i>l[i]>>r[i]>>x; data.push_back(std::make_pair(x,i+1)); } sort(data.begin(),data.end()); vector ans(Q,inf); //本題 for(int _=0;_<2;_++){ Segtree seg(N); for(auto p:data){ if(p.second<=0) seg.update(-p.second,p.first); else{ int index=p.second-1; ans[index]=std::min(ans[index],p.first-seg.Query(l[index]-1,r[index])); } } for(auto &p:data) p.first*=-1; sort(data.begin(),data.end()); } for(int i=0;i