#include <stdio.h>
#define NMAX 100005
int t[NMAX*3], st[NMAX*3], dr[NMAX*3], in[NMAX*3], okz[NMAX*3];
//int n, m, a, b;//, ok, P, Q;
//int A, B, C, D;
int n, m;
inline int max(int a, int b){
if(a > b) return a;
return b;
}
void initializare(int p, int q,int i){
st[i] = dr[i] = in[i] = q-p+1;
if(p==q) return;
initializare(p, (p+q)/2, 2*i);
initializare((p+q)/2+1,q,2*i+1);
}
void update(int p, int q, int a, int b, int i,int ok1,int ok2){
if(a <= p && q <= b){
if(ok1){
t[i] = q - p + 1;
st[i] = dr[i] = in[i] = 0;
okz[i] = 1;
}
else {
t[i] = 0;
okz[i] = 0;
st[i] = dr[i] = in[i] = q-p+1;
}
return ;
}
int m = (p+q)>>1;
okz[i] = 0;
if(in[i] == 0)
st[i*2] = dr[i*2] = in[i*2] = st[i*2+1] = dr[i*2+1] = in[i*2+1] = 0;
else if(in[i] == q-p+1){
st[i*2] = dr[i*2] = in[i*2] = (p+q)/2-p + 1;
st[i*2+1] = dr[i*2+1] = in[i*2+1] = q - (p+q)/2;
}
if(a <= m)
update(p, m, a , b, 2*i, ok1, ok2);
if(b > m) update(m+1, q, a, b, 2*i+1, ok1, ok2);
in[i] = max(dr[2*i]+st[2*i+1], max(in[2*i], in[2*i+1]));
if(st[2*i] == m-p+1) st[i] = st[2*i] + st[2*i+1];
else st[i] = st[2*i];
if(dr[2*i+1] == q-m) dr[i] = dr[2*i+1] + dr[2*i];
else dr[i] = dr[2*i+1];
in[i] = max(in[i], max(st[i],dr[i]));
}
int main(){
int i;
freopen("hotel.in", "r", stdin);
freopen("hotel.out", "w", stdout);
scanf("%d%d", &n, &m);
initializare(1,n,1);
for(i = 1; i <= m; ++i){
int x, y;
scanf("%d", &x);
if(x == 1){
scanf("%d%d", &x, &y);
update(1,n, x, x+y-1, 1, 1, 0);
}
else if(x== 2){
scanf("%d%d", &x, &y);
update(1,n, x, x+y-1, 1, 0, 0);
}
else printf("%d\n",in[1]);
}
return 0;
}