1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
#include<bits/stdc++.h>
using namespace std;

const int lim=2097190;
int t[lim][4];
int n,m,base=1;

int l,r,k;

void makebase(){
	while(base<n) base<<=1;
}

void pull(int x, int num){
	int x2=x<<1; //printf("x %d\n",x);
	t[x][num]=t[x2][num]+t[x2+1][num];
}

void push(int x, int num, int siz){
	if(num==0 || num==1){
		int siz2=siz-t[x][2];
		if(t[x][num]==siz2){
			int x2=x<<1;
			siz>>=1;
			t[x2][num]=siz-t[x2][2]; t[x2+1][num]=siz-t[x2+1][2];
		}
	}
	else{
		if(t[x][num]==siz){
			int x2=x<<1;
			siz>>=1;
			t[x2][num]=siz; t[x2+1][num]=siz;
		}
	}
}

void wyp(){
	int pocz=1;
	while(pocz<=16){
		for(int i=pocz;i<pocz*2;i++) printf("%d ",t[i][1]); printf("\n");
		pocz<<=1;
	}
}

void update(int a, int b, int typ, int x=1, int low=0, int high=base-1){
//printf("kfdklsdaj");
	if(a>b) return;
	if(a==low && b==high){
		t[x][3]=b+1-a;
		t[x][typ]=b+1-a-t[x][2]; //printf("debu: a %d b %d typ %d val: %d\n",a,b,typ,t[x][typ]);
		return;
	}
	
	int siz=high+1-low;
	if(t[x][2]==siz) return;
	if(t[x][typ]==(siz-t[x][2])) return;
	
	push(x,3,siz);
	int mid=(low+high)>>1;
	int x2=x<<1;
	update(a,min(b,mid),typ,x2,low,mid);
	update(max(mid+1,a),b,typ,x2+1,mid+1,high);
	pull(x,typ); pull(x,3); 
}

void remove(int a, int b, int x=1, int low=0, int high=base-1){
	if(a>b) return;
	if(a==low && b==high){
		t[x][3]=b+1-a;
		//printf("debr: %d %d\n",a,b);
		t[x][0]=0; t[x][1]=0; t[x][2]=b+1-a; return;
	}
	int siz=high+1-low;
	if(t[x][2]==siz) return;
	
	push(x,3,siz); push(x,1,siz); push(x,0,siz);
	int mid=(low+high)>>1;
	int x2=x<<1;
	remove(a,min(b,mid),x2,low,mid);
	remove(max(mid+1,a),b,x2+1,mid+1,high);
	pull(x,1); pull(x,0); pull(x,3); pull(x,2);
}

int main(){

	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin>>n>>m;
	makebase();
	while(m--){
		cin>>l>>r>>k;
		if(k==3) remove(l-1,r-1); else update(l-1,r-1,k-1);
	//	wyp();
//	printf("val %d\n",t[1][1]);
	}
//	printf("check: %d %d %d %d\n",t[1][0],t[1][1],t[1][2],t[1][3]);
	cout<<t[1][0]+t[1][1]-(t[1][3]-t[1][2]);
}