#include #define int long long using namespace std; const int mod=1e18+9; const int MAXN=2400010; int x[150010],lt[150010],rt[150010]; int u[300010],v[600010],len[600010],p[MAXN],ans[600010]; void build(int rt,int l,int r) { if(l==r)p[rt]=len[l]; else { int mid=(l+r)/2; build(rt*2,l,mid); build(rt*2+1,mid+1,r); p[rt]=p[rt*2]+p[rt*2+1]; } } struct node{ int val[MAXN],lazy1[MAXN]; bool lazy0[MAXN]; void push_up(int rt) { val[rt]=val[rt*2]+val[rt*2+1]; } void push_down1(int rt) { if(lazy1[rt]!=0) { val[rt*2]+=lazy1[rt]*p[rt*2]; val[rt*2+1]+=lazy1[rt]*p[rt*2+1]; lazy1[rt*2]+=lazy1[rt]; lazy1[rt*2+1]+=lazy1[rt]; lazy1[rt]=0; } } void push_down0(int rt) { if(lazy0[rt]) { val[rt*2]=val[rt*2+1]=0; lazy0[rt*2]=lazy0[rt*2+1]=1; lazy0[rt]=0; } } void update1(int rt,int l,int r,int ul,int ur) { if(ul>r||ur=r) { val[rt]+=p[rt]; ++lazy1[rt]; return; } push_down1(rt); int mid=(l+r)/2; update1(rt*2,l,mid,ul,ur); update1(rt*2+1,mid+1,r,ul,ur); push_up(rt); } void update0(int rt,int l,int r,int ul,int ur) { if(ul>r||ur=r) { val[rt]=0; lazy0[rt]=1; lazy1[rt]=0; return; } push_down0(rt); int mid=(l+r)/2; update0(rt*2,l,mid,ul,ur); update0(rt*2+1,mid+1,r,ul,ur); push_up(rt); } int query(int rt,int l,int r,int ql,int qr) { if(ql>r||qr=r)return val[rt]; push_down1(rt); push_down0(rt); int mid=(l+r)/2,ans; ans=query(rt*2,l,mid,ql,qr)+query(rt*2+1,mid+1,r,ql,qr); return ans; } }tr[5]; signed main() { // freopen("color.in","r",stdin); // freopen("color.out","w",stdout); ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); int n,q,k=0; int L,R,mid; int a,b,c,d,e,mx,cnt,col; cin>>n>>q; for(int i=1;i<=q;i++) { cin>>x[i]>>lt[i]>>rt[i]; u[i*2-1]=lt[i]; u[i*2]=rt[i]; } sort(u+1,u+q*2+1); for(int i=1;i<=q*2;i++) { if(i==1) { v[++k]=u[1],len[k]=1; continue; } if(i!=1&&u[i]==u[i-1])continue; if(u[i]-u[i-1]==1) { v[++k]=u[i],len[k]=1; } else { v[++k]=u[i-1]+1,len[k]=u[i]-u[i-1]-1; v[++k]=u[i],len[k]=1; } } build(1,1,k); for(int i=1;i<=q;i++) { L=1,R=k; while(L<=R) { mid=(L+R)/2; if(v[mid]