#include <fstream>
using namespace std;
ifstream f("hotel.in");
ofstream g("hotel.out");
const int NMAX = 4e5 + 50;
int aib[NMAX],n,inleft[NMAX], inrigth[NMAX];
void build(int nod, int lo, int hi){
if(lo > hi)
return;
if(lo == hi){
aib[nod] = inleft[nod] = inrigth[nod] = 1;
return;
}
int mid = (hi + lo) / 2;
build(1,lo, mid);
build(1,mid + 1 , hi);
aib[nod] = inleft[nod] = inrigth[nod] = hi - lo + 1;
}
void update(int nod, int lo, int hi, int le, int ri){
if(lo > hi || lo > ri || hi < le) return;
if(lo >= le && hi <= ri){
aib[nod] = inleft[nod] = inrigth[nod] = 0;
return;
}
int mid = (lo + hi) / 2;
if(aib[nod] == 0)
aib[2 * nod] = aib[2 * nod + 1] = inleft[2 * nod] = inleft[2 * nod + 1] = inrigth[2 * nod] = inleft[2 * nod + 1] = 0;
else
if(aib[nod] == hi - lo + 1){
aib[2 * nod + 1] = inleft[2 * nod + 1] = inrigth[2 * nod + 1] = hi - mid;
aib[2 *nod] = inleft[2 * nod] = inrigth[2 * nod] = mid - lo + 1;
}
update(2 * nod, lo, mid, le, ri);
update(2 * nod + 1, mid + 1, hi, le , ri);
aib[nod] = max(inleft[2 * nod + 1] + inrigth[2 * nod] , max(aib[2 * nod] , aib[2 * nod + 1] ));
inleft[nod] = inleft[2 * nod];
inrigth[nod] = inrigth[2 * nod + 1];
if(inleft[nod] == mid - lo + 1)
inleft[nod] += inleft[2 * nod + 1];
if(inrigth[nod] == hi - mid)
inrigth[nod] += inrigth[2 * nod];
}
void update2(int nod, int lo, int hi, int le, int ri){
if(lo > hi || lo > ri || hi < le) return;
if(lo >= le && hi <= ri){
aib[nod] = inleft[nod] = inrigth[nod] = hi - lo + 1;
return;
}
int mid = (lo + hi) / 2;
if(aib[nod] == 0)
aib[2 * nod] = aib[2 * nod + 1] = inleft[2 * nod] = inleft[2 * nod + 1] = inrigth[2 * nod] = inleft[2 * nod + 1] = 0;
else
if(aib[nod] == hi - lo + 1){
aib[2 * nod + 1] = inleft[2 * nod + 1] = inrigth[2 * nod + 1] = hi - mid;
aib[2 *nod] = inleft[2 * nod] = inrigth[2 * nod] = mid - lo + 1;
}
update2(2 * nod, lo, mid, le, ri);
update2(2 * nod + 1, mid + 1, hi, le , ri);
aib[nod] = max(inleft[2 * nod + 1] + inrigth[2 * nod] , max(aib[2 * nod] , aib[2 * nod + 1] ));
inleft[nod] = inleft[2 * nod];
inrigth[nod] = inrigth[2 * nod + 1];
if(inleft[nod] == mid - lo + 1)
inleft[nod] += inleft[2 * nod + 1];
if(inrigth[nod] == hi - mid)
inrigth[nod] += inrigth[2 * nod];
}
int main(){
int i,a,b,q,m;
f >> n >> m;
build(1,1,n);
for(i = 1 ; i <= m ; i++){
f >> q;
if(q == 1){
f >> a >> b;
update(1,1,n,a, a + b - 1);
}else
if(q == 2){
f >> a >> b;
update2(1,1,n,a,a + b - 1);
}else
g << aib[1] << "\n";
}
return 0;
}