#include using namespace std; using ll=long long; using Graph=vector>; #define INF 1000000000 int n=1; vector tree1; void update(int a,int b,int x,int i,int left,int right){ if(a<=left&&right<=b){ tree1[i]=max(tree1[i],x); return; } if(right<=a||b<=left){ return; } update(a,b,x,2*i+1,left,(left+right)/2); update(a,b,x,2*i+2,(left+right)/2,right); } vector tree2; int solve(int a,int b,int i,int left,int right){ if(a<=left&&right<=b){ return tree2[i]; } if(right<=a||b<=left){ return INF; } int x=solve(a,b,2*i+1,left,(left+right)/2); int y=solve(a,b,2*i+2,(left+right)/2,right); return min(x,y); } int main(){ int N,Q; cin>>N>>Q; while(n l(Q),r(Q),B(Q); for(int i=0;i>l[i]>>r[i]>>B[i]; l[i]--; } tree1.assign(2*n-1,1); tree2.assign(2*n-1,INF); for(int i=0;i=0;i--){ tree2[i]=min(tree2[2*i+1],tree2[2*i+2]); } for(int i=0;i