#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
#define NMAX 100000
struct Node{
int pref, suf, lmax, l;
}tree[4 * NMAX + 1];
int lazy[4 * NMAX + 1];
Node join(Node a, Node b){
Node aux;
aux.l = a.l + b.l;
aux.lmax = max(max(a.lmax, b.lmax), a.suf + b.pref);
aux.pref = (a.pref == a.l)? a.l + b.pref : a.pref;
aux.suf = (b.suf == b.l)? b.l + a.suf : b.suf;
return aux;
}
void build(int node, int st, int dr){
tree[node].l = dr - st + 1;
if (st == dr){
tree[node].suf = tree[node].pref = tree[node].lmax = 1;
return;
}
int mij = (st + dr) / 2;
build(node * 2, st, mij);
build(node * 2 + 1, mij + 1, dr);
tree[node] = join(tree[node * 2], tree[node * 2 + 1]);
}
void propagate(int node) {
if (lazy[node] == 0) return;
if (lazy[node] == 1){
tree[node * 2].pref = tree[node * 2].suf = tree[node * 2].lmax = 0;
tree[node * 2 + 1].pref = tree[node * 2 + 1].suf = tree[node * 2 + 1].lmax = 0;
}
else if (lazy[node] == 2){
tree[node * 2].pref = tree[node * 2].suf = tree[node * 2].lmax = tree[node * 2].l;
tree[node * 2 + 1].pref = tree[node * 2 + 1].suf = tree[node * 2 + 1].lmax = tree[node * 2 + 1].l;
}
lazy[node * 2] = lazy[node * 2 + 1] = lazy[node];
lazy[node] = 0;
}
void update(int node, int st, int dr, int ql, int qr, int val){
if (dr < ql || qr < st){
return;
}
if (ql <= st && dr <= qr){
if (val == 1){
tree[node].pref = tree[node].suf = tree[node].lmax = 0;
}
else{
tree[node].pref = tree[node].suf = tree[node].lmax = tree[node].l;
}
lazy[node] = val;
return;
}
propagate(node);
int mij = (st + dr) / 2;
update(node * 2, st, mij, ql, qr, val);
update(node * 2 + 1, mij + 1, dr, ql, qr, val);
tree[node] = join(tree[node * 2], tree[node * 2 + 1]);
}
int main()
{
int N, M;
fin >> N >> M;
build(1, 1, N);
for (int i = 1; i <= M; i++){
int tip;
fin >> tip;
if (tip == 1){
int poz, cati;
fin >> poz >> cati;
update(1, 1, N, poz, poz + cati - 1, 1);
}
else if (tip == 2){
int poz, cati;
fin >> poz >> cati;
update(1, 1, N, poz, poz + cati - 1, 2);
}
else{
fout << tree[1].lmax << '\n';
}
}
return 0;
}