#include <stdio.h>
#include <set>
using std::set;
using std::multiset;
#define aibSize 131072
#define Nadejde 100000
int N, M;
char sign[Nadejde + 2];
int aib[aibSize + 1];
set <int> sl;
set <int>::iterator it;
multiset <int> heap;
multiset <int>::iterator curr;
void add(int x, int val) {
if (val == 1) {
if (x != 0) {
heap.insert(x);
}
} else if (x != 0) {
heap.erase(heap.find(x));
}
}
void init() {
int i;
add(N, +1);
for (i = 1; i <= N; i++) {
sign[i] = '0';
}
}
void push(int x, char c) {
sl.insert(x);
sign[x] = c;
}
void pop(int x) {
sl.erase(x);
sign[x] = '0';
}
int left(int x) {
it = sl.lower_bound(x);
if (it == sl.begin()) {
return 1;
} else {
it--;
return *it;
}
}
int right(int x) {
it = sl.lower_bound(x);
if (it == sl.end()) {
return N + 1;
} else {
return *it;
}
}
void test(int x){}/*fprintf(stderr,"Intra la if-ul %d\n",x+1);}
void afis() {
for(it=sl.begin();it!=sl.end();it++){
fprintf(stderr,"%d,",*it);
}
fprintf(stderr,"\n");
}
int *val=new int[N+1];
void config(){for(int i=1;i<=N;i++)fprintf(stderr,"%d",val[i]);fprintf(stderr,"\n");}
void config1(){for(int i=1;i<=N+1;i++)fprintf(stderr,"%c",sign[i]);fprintf(stderr,"\n");}
*/
int main(void) {
int i, a, b, task, lo, hi;
FILE *f = fopen("hotel.in", "r");
freopen("hotel.out", "w", stdout);
fscanf(f, "%d %d", &N, &M);
init();
/* Raspunde la intrebari. */
for (i = 1; i <= M; i++) {
//fprintf(stderr, "Intrebarea: %d\n", i);
fscanf(f, "%d", &task);
if (task == 1) {
fscanf(f, "%d %d", &a, &b);
b += a - 1;
/*
for(int j=a;j<=b;j++){
val[j]=1;
}
*/
/* Trebuie sa fim fix sub "a". */
if (sl.empty()) {
lo = 1;
hi = N + 1;
} else {
it = sl.upper_bound(a);
if (it == sl.begin()) {
lo = 1;
hi = *it;
} else if (it == sl.end()) {
it--;
lo = *it;
hi = N + 1;
} else {
hi = *it;
it--;
lo = *it;
}
}
add(hi - lo, -1);
add(a - lo, +1);
add(hi - b - 1, +1);
if (sign[a] == '-') {
pop(a);
} else {
push(a, '+');
}
if (sign[b + 1] == '+') {
pop(b + 1);
} else {
push(b + 1, '-');
}
} else if (task == 2) {
fscanf(f, "%d %d", &a, &b);
b += a - 1;
// for(int j=a;j<=b;j++)val[j]=0;
/* Stergem o secventa inclusa intr-un sir de "1". */
if (sign[a] != '+' && sign[b + 1] != '-') {
test(0);
push(a, '-');
push(b + 1, '+');
add(b - a + 1, +1);
/* Stergem prefixul unui sir de "1". */
} else if (sign[a] == '+' && sign[b + 1] != '-') {
test(1);
pop(a);
push(b + 1, '+');
lo = left(a);
add(a - lo, -1);
add(b - lo + 1, +1);
/* Stergem sufixul unui sir de "1". */
} else if (sign[a] != '+' && sign[b + 1] == '-') {
test(2);
push(a, '-');
pop(b + 1);
hi = right(b + 1);
add(hi - b - 1, -1);
add(hi - a, +1);
/* Stergem un sir de "1". */
} else {
test(3);
pop(a);
pop(b + 1);
/*
afis();
config();
config1();
*/
lo = left(a);
hi = right(b + 1);
//fprintf(stderr,"hai->lo = %d, hi=%d\n",lo,hi);
add(hi - b - 1, -1);
// fprintf(stderr,"1");
add(a - lo, -1);
// fprintf(stderr,"1");
add(hi - lo, +1);
//fprintf(stderr,"cum");
}
} else {
if (!heap.empty()) {
curr = --heap.end();
fprintf(stdout, "%d\n", *curr);
} else {
fprintf(stdout, "0\n");
}
}
/* config();
config1();
afis();
*/
}
fclose(f);
fclose(stdout);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}