#include<cstdio>
#include<iostream>
using namespace std;
#define NMAX 100001
int N , M , S[NMAX*4] , L[NMAX*4] , R[NMAX*4];
void update(int n ,int l , int r , int a , int b , int val);
int main()
{
int t , a, b;
freopen("hotel.in" , "r" , stdin );
freopen("hotel.out" , "w" , stdout );
scanf("%d%d" , &N , &M );
update(1,1,N,1,N,1);
for(int i = 1 ; i<= M ; ++i )
{
scanf("%d" , &t );
if(t == 1)
{
scanf("%d%d" , &a , &b );
update(1,1,N,a,a+b-1,0);
}
if(t == 2)
{
scanf("%d%d" , &a , &b );
update(1,1,N,a,a+b-1,1);
}
if(t == 3)
printf("%d\n" , S[1]);
}
return 0;
}
void update(int n , int l , int r , int a , int b, int val)
{
if(a <= l && b >= r)
{
S[n] = L[n] = R[n] = (r-l+1)*val;
return;
}
int m = (l+r)/2;
if(S[n] == 0)
{
S[2*n] = L[2*n] = R[2*n] = 0;
S[2*n+1] = L[2*n+1] = R[2*n+1] = 0;
}
if(S[n] == r-l+1)
{
S[2*n] = L[2*n] = R[2*n] = (m-l+1);
S[2*n+1] = L[2*n+1] = R[2*n+1] = r-m;
}
if(a <= m)update(2*n,l,m,a,b,val);
if(b > m)update(2*n+1,m+1,r,a,b,val);
L[n] = L[2*n];
if(L[2*n] == m-l+1)L[n] += L[2*n+1];
R[n] = R[2*n+1];
if(R[2*n+1] == r-m)R[n] += R[2*n];
S[n] = max(S[2*n+1] , S[2*n]);
S[n] = max(S[n] , R[2*n] + L[2*n+1]);
}