rt,TLE on #18
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=15001000;
const int mod=1e9+7;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^48);c=getchar();}
return x*f;
}
inline void write(int x){
static char buf[20];
static int len=-1;
if(x<0)putchar('-'),x=-x;
do buf[++len]=x%10,x/=10;while(x);
while(len>=0)putchar(buf[len--]+'0');
putchar('\n');
}
int lowbit(int x){return x&-x;}
int qpow(int a,int b){
int ans=1;
while(b){
if(b&1){
ans*=a;
ans%=mod;
}
a*=a;
a%=mod;
b>>=1;
}
return ans;
}
int ls[maxn],rs[maxn],tag[maxn],sum[maxn];
int cnt=1;
int n,q;
// int add(){cnt++,tag[cnt]=-1;return cnt;}
inline void pushup(int o){sum[o]=sum[ls[o]]+sum[rs[o]];}
inline void pushdown(int o,int l,int r){
if(tag[o]==-1)return ;
int mid=r+l>>1;
if(!ls[o])ls[o]=++cnt;
if(!rs[o])rs[o]=++cnt;
sum[ls[o]]=(mid-l+1)*tag[o];
sum[rs[o]]=(r-mid)*tag[o];
tag[ls[o]]=tag[rs[o]]=tag[o];
tag[o]=-1;
}
void update(int &o,int l,int r,int x,int y,int val){
if(!o)o=++cnt;
if(l>=x&&r<=y){
tag[o]=val;
sum[o]=(r-l+1)*val;
return ;
}
pushdown(o,l,r);
int mid=l+r>>1;
if(x<=mid)update(ls[o],l,mid,x,y,val);
if(y>mid)update(rs[o],mid+1,r,x,y,val);
pushup(o);
}
int main(){
memset(tag,-1,sizeof tag);
n=read(),q=read();
int rt=1;
while(q--){
int l=read(),r=read(),k=read();
update(rt,1,n,l,r,2-k);
write(n-sum[1]);
}
}