#include <cstdio>
#include <algorithm>
using namespace std;
struct nodaint
{
int pref, suf, ssmax, l;
}aint[400000];
int a, b, val;
void build_aint(int nod, int left, int right)
{
aint[nod].pref = aint[nod].suf = aint[nod].ssmax = aint[nod].l = right - left + 1;
if(left == right)
return;
int mid = (left + right) / 2;
build_aint(nod * 2, left, mid);
build_aint(nod * 2 + 1, mid + 1, right);
}
void update(int nod, int left, int right)
{
if(left > b || right < a)
return;
if(a <= left && right <= b)
{
if(val == 0)
aint[nod].pref = aint[nod].suf = aint[nod].ssmax = right - left + 1;
else
aint[nod].pref = aint[nod].suf = aint[nod].ssmax = 0;
return;
}
int mid = (left + right) / 2;
if(aint[nod].ssmax == 0)
aint[nod * 2].ssmax = aint[nod * 2].suf = aint[nod * 2].pref = aint[nod * 2 + 1].ssmax = aint[nod * 2 + 1].suf = aint[nod *2 + 1].pref = 0;
if(aint[nod].ssmax == right - left + 1)
{
aint[2 * nod].ssmax = aint[2 * nod].pref = aint[2 * nod].suf = mid - left + 1;
aint[2 * nod + 1].ssmax = aint[2 * nod + 1].pref = aint[2 * nod + 1].suf= right - mid;
}
if(a <= mid)
update(nod * 2, left, mid);
if(b > mid)
update(nod * 2 + 1, mid + 1, right);
if(aint[nod * 2].pref == aint[nod * 2].l)
aint[nod].pref = aint[nod * 2].l + aint[nod * 2 + 1].pref;
else
aint[nod].pref = aint[nod * 2].pref;
if(aint[nod * 2 + 1].suf == aint[nod * 2 + 1].l)
aint[nod].suf = aint[nod * 2 + 1].l + aint[nod * 2].suf;
else
aint[nod].suf = aint[nod * 2 + 1].suf;
aint[nod].ssmax = max(max(aint[nod * 2].ssmax, aint[nod * 2 + 1].ssmax),
aint[nod * 2].suf + aint[nod * 2 + 1].pref);
}
int main()
{
FILE *fin, *fout;
fin = fopen("hotel.in", "r");
fout = fopen("hotel.out", "w");
int n, p;
fscanf(fin, "%d%d\n", &n, &p);
a = 1;
b = n;
val = 0;
build_aint(1, 1, n);
for(int i = 1; i <= p; i++)
{
char c;
fscanf(fin, "%c", &c);
if(c == '1')
{
fscanf(fin, "%d%d\n", &a, &b);
b = a + b - 1;
val = 1;
update(1, 1, n);
}
else if(c == '2')
{
fscanf(fin, "%d%d\n", &a, &b);
b = a + b - 1;
val = 0;
update(1, 1, n);
}
else
{
fprintf(fout, "%d\n", aint[1].ssmax);
fscanf(fin, "%c", &c);
}
}
return 0;
}