// Tree Sequence.cpp : Defines the entry point for the console application.
//
//#include "stdafx.h"
#include <fstream>
#define NMax 100010
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
int a, b, i, n, m, t, x;
int max(int a, int b)
{
return a < b ? b : a;
}
struct nod {
int MaxSequence;
int st;
int dr;
int lazy;
};
nod p[4 * NMax];
void propagate(int nod,int in,int sf)
{
p[nod * 2].lazy = p[nod * 2 + 1].lazy = p[nod].lazy;
p[nod].lazy = 0;
if (p[nod * 2].lazy == 0)
{
p[nod * 2].MaxSequence = p[nod * 2].st = p[nod * 2].dr = p[nod * 2 + 1].MaxSequence = p[nod * 2 + 1].st = p[nod * 2 + 1].dr = 0;
return;
}
int mij = (in + sf) / 2;
p[nod * 2].MaxSequence = p[nod * 2].st = p[nod * 2].dr = mij - in + 1;
p[nod * 2 + 1].MaxSequence = p[nod * 2 + 1].st = p[nod * 2 + 1].dr = sf - mij;
}
void ReThinkMax(int nod,int in,int sf)
{
p[nod].MaxSequence = max(max(p[nod * 2].MaxSequence, p[nod * 2 + 1].MaxSequence), p[nod * 2].dr + p[nod * 2].st);
int mij = (in + sf) / 2;
p[nod].st = p[nod * 2].st;
p[nod].dr = p[nod * 2 + 1].dr;
if (p[nod * 2].st == mij - in + 1)
p[nod].st = p[nod * 2].st + p[nod * 2 + 1].st;
if (p[nod * 2+1].dr == sf - mij)
p[nod].dr = p[nod * 2].dr + p[nod * 2 + 1].dr;
}
void Update(int nod, int in, int sf, int a, int b,int val)
{
if (a<=in && b>=sf)
{
p[nod].lazy = val;
if(val==1)
p[nod].dr = p[nod].st = p[nod].MaxSequence = sf - in + 1;
else
p[nod].dr = p[nod].st = p[nod].MaxSequence = 0;
return;
}
if (p[nod].lazy)
propagate(nod,in,sf);
int mij = (in + sf) / 2;
if (mij >= a)
Update(nod * 2, in, mij, a, b, val);
if(mij < b)
Update(nod * 2 + 1, mij + 1, sf, a, b, val);
ReThinkMax(nod,in,sf);
}
void init(int nod, int in, int sf)
{
p[nod].MaxSequence = p[nod].dr = p[nod].st = sf - in + 1;
int mij = (in + sf) / 2;
if (in != sf)
{
init(nod * 2, in, mij);
init(nod * 2 + 1, mij + 1, sf);
}
}
int main()
{
fin >> n >> x;
init(1, 1, n);
for (i = 1; i <= x; i++)
{
fin >> t ;
if (t==1)
{
fin >> a >> m;
Update(1, 1, n, a, a + m - 1, -1);
continue;
}
if (t == 2)
{
fin >> a >> m;
Update(1, 1, n, a, a + m - 1, 1);
continue;
}
fout<< p[1].MaxSequence << '\n';
}
return 0;
}