using namespace std;
#include <algorithm>
#include <cstdio>
#define maxn 100001
#define common \
int m=(l+r)>>1, L=n<<1, R=L+1
int s[maxn*3], st[maxn*3],dr[maxn*3];
bool fre[maxn*3], full[maxn*3];
int n,m;
inline void build(int n, int l,int r)
{
if(l==r)
{
fre[n]=1;
full[n]=0;
st[n]=dr[n]=s[n]=1;
return;
}
common;
build(L, l, m);
build(R, m+1, r);
s[n]=r-l+1;
st[n]=dr[n]=s[n];
fre[n]=1;
full[n]=0;
}
inline void update1(int n,int l, int r, int ql, int qr)
{
//printf("%d %d %d %d %d\n", n,l, r, ql, qr);
if(l==ql && r==qr)
{
fre[n]=0;
full[n]=1;
st[n]=dr[n]=s[n]=0;
return;
}
//if(l>=r)return;
common;
if(fre[n])
{
fre[L]=fre[R]=1;
st[L]=dr[L]=s[L]=m-l+1;
st[R]=dr[R]=s[R]=r-(m+1)+1;
fre[n]=0;
}
if(ql<=m) update1(L, l, m, ql, min(qr, m));
if(qr>m) update1(R, m+1, r, max(ql, m+1), qr);
if(fre[L] && fre[R]) fre[n]=1;
if(full[L] && full[R]) full[n]=1;
st[n]=st[L];
if(fre[L]) st[n]+=st[R];
dr[n]=dr[R];
if(fre[R]) dr[n]+=dr[L];
s[n]=max(s[L], max(s[R], dr[L]+st[R]));
s[n]=max(s[n], max(st[n], dr[n]));
}
inline void update2(int n, int l, int r, int ql,int qr)
{
// printf("%d %d %d %d %d\n",n,l, r, ql, qr);
if(ql==l && qr==r)
{
fre[n]=1;
full[n]=0;
st[n]=dr[n]=s[n]=r-l+1;
return;
}
//if(l>=r)return;
common;
if(full[n])
{
full[L]=full[R]=1;
st[L]=st[R]=dr[L]=dr[R]=s[L]=s[R]=0;
full[n]=0;
}
if(ql<=m) update2(L, l, m, ql, min(qr, m));
if(qr>m) update2(R, m+1, r, max(ql, m+1), qr);
if(fre[L] && fre[R]) fre[n]=1;
if(full[L] && full[R]) full[n]=1;
st[n]=st[L];
if(fre[L]) st[n]+=st[R];
dr[n]=dr[R];
if(fre[R]) dr[n]+=dr[L];
s[n]=max(s[L], max(s[R], dr[L]+st[R]));
s[n]=max(s[n], max(st[n], dr[n]));
}
inline int query()
{
return s[1];
}
int main()
{
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%d %d\n", &n, &m);
build(1, 1, n);
int t, p, q;
// for(int i=1;i<=2*n;++i)printf("%d ", s[i]);
//printf("\n");
while(m--)
{
scanf("%d ", &t);
//printf("%d\n", t);
if(t==1)
{
scanf("%d %d\n", &p, &q);
update1(1, 1, n, p, p+q-1);
}
if(t==2)
{
scanf("%d %d\n", &p, &q);
//printf("__%d %d__\n", p, p+q-1);
update2(1, 1, n, p, p+q-1);
}
if(t==3)
{
printf("%d\n", query());
}
//for(int i=1;i<=2*n;++i)printf("%d ", s[i]);
//printf("\n");
}
return 0;
}