#include<bits/stdc++.h> using namespace std; #define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); #define endl "\n" #define int long long int struct item{ int sum,pre,suf,max_sum; }; struct segment{ int size=1; vector<int>sum,pre,suf,ope,max_sum; void print() { for(int i=0;i<2*size;i++) { cout<<i<<' '<<sum[i]<<' '<<pre[i]<<' '<<suf[i]<<' '<<max_sum[i]<<' '<<ope[i]<<endl; } } void init(int n) { while(size<n) { size*=2; } sum.assign(2*size,0); ope.assign(2*size,LONG_LONG_MAX); pre.assign(2*size,0); suf.assign(2*size,0); max_sum.assign(2*size,0); return ; } int operation(int a,int b,int l,int r) { if(b!=LONG_LONG_MAX) { return b*(r-l); } return a; } int operation2(int a,int b,int l,int r) { if(b!=LONG_LONG_MAX) { if(b<0) { return 0; } else { return b*(r-l); } } else { return a; } } void propagate(int node,int l,int r) { if(ope[node]!=LONG_LONG_MAX) { sum[node]=ope[node]*(r-l); if(ope[node]<0) { pre[node]=0; suf[node]=0; max_sum[node]=0; } else { pre[node]=ope[node]*(r-l); suf[node]=ope[node]*(r-l); max_sum[node]=ope[node]*(r-l); } } if(r-l==1) { ope[node]=LONG_LONG_MAX; return ; } if(ope[node]!=LONG_LONG_MAX) { ope[2*node+1]=ope[node]; ope[2*node+2]=ope[node]; } ope[node]=LONG_LONG_MAX; return ; } void modify(int node,int l,int r,int lx,int rx,int value) { propagate(node,l,r); if(lx<=l && r<=rx) { ope[node]=value; return ; } else if(l>=rx ||r<=lx) { return ; } int mid=l+(r-l)/2; modify(2*node+1,l,mid,lx,rx,value); modify(2*node+2,mid,r,lx,rx,value); sum[node]=operation(sum[2*node+1],ope[2*node+1],l,mid)+operation(sum[2*node+2],ope[2*node+2],mid,r); pre[node]=max(operation2(pre[2*node+1],ope[2*node+1],l,mid),operation(sum[2*node+1],ope[2*node+1],l,mid)+operation2(pre[2*node+2],ope[2*node+2],mid,r)); suf[node]=max(operation2(suf[2*node+2],ope[2*node+2],mid,r),operation(sum[2*node+2],ope[2*node+2],mid,r)+operation2(suf[2*node+1],ope[2*node+1],l,mid)); max_sum[node]=max(max(operation2(max_sum[2*node+1],ope[2*node+1],l,mid),operation2(max_sum[2*node+2],ope[2*node+2],mid,r)),operation2(pre[2*node+2],ope[2*node+2],mid,r)+operation2(suf[2*node+1],ope[2*node+1],l,mid)); return ; } void modify(int lx,int rx,int value) { return modify(0,0,size,lx,rx,value); } }; int32_t main() { int n,m; cin>>n>>m; segment sg; sg.init(n); for(int i=0;i<m;i++) { int l,r,value; cin>>l>>r>>value; sg.modify(l,r,value); cout<<sg.max_sum[0]<<endl; //sg.print(); } }