#include <bits/stdc++.h>
using namespace std;
struct aint {
int l;
int pref;
int suf;
int lazy;
int st;
int dr;
aint* left;
aint* right;
};
aint* makesons( aint* root ) {
int st = root->st, dr = root->dr, mij = ( st + dr ) / 2;
if ( root->left == NULL ) {
root->left = new aint {
mij - st + 1,
mij - st + 1,
mij - st + 1,
-1,
st,
mij,
NULL,
NULL,
};
}
if ( root->right == NULL ) {
root->right = new aint {
dr - mij,
dr - mij,
dr - mij,
-1,
mij + 1,
dr,
NULL,
NULL,
};
}
return root;
}
aint* propag( aint* root ) {
if ( root->lazy == -1 )
return root;
int st = root->st, dr = root->dr, mij = ( st + dr ) / 2;
root->left->l = root->left->pref = root->left->suf = ( mij - st + 1 ) * root->lazy;
root->left->lazy = root->lazy;
root->right->l = root->right->pref = root->right->suf = ( dr - mij ) * root->lazy;
root->right->lazy = root->lazy;
root->lazy = -1;
return root;
}
aint* update( aint* root, int a, int b, int val ) {
root = makesons( root );
root = propag( root );
int st = root->st, dr = root->dr, mij = ( st + dr ) / 2;
// cout << st << ' ' << dr << ' ' << a << ' ' << b << endl;
if ( st == a && dr == b ) {
root->l = root->pref = root->suf = ( dr - st + 1 ) * val;
root->lazy = val;
return root;
}
if ( b <= mij )
root->left = update( root->left, a, b, val );
else if ( a > mij )
root->right = update( root->right, a, b, val );
else {
root->left = update( root->left, a, mij, val );
root->right = update( root->right, mij + 1, b, val );
}
root->l = max( { root->left->l, root->right->l, root->left->suf + root->right->pref } );
root->pref = root->left->pref;
if ( root->pref == mij - st + 1 )
root->pref += root->right->pref;
root->suf = root->right->suf;
if ( root->suf == dr - mij )
root->suf += root->left->suf;
return root;
}
int main() {
ifstream fin( "hotel.in" );
ofstream fout( "hotel.out" );
int n, i, q;
fin >> n >> q;
aint* root = new aint {
n,
n,
n,
-1,
0,
n - 1,
NULL,
NULL,
};
for ( i = 0; i < q; i ++ ) {
int tip;
fin >> tip;
if ( tip == 3 )
fout << root->l << '\n';
else {
int st, dr;
fin >> st >> dr;
root = update( root, st - 1, st - 1 + dr - 1, tip - 1 );
}
}
return 0;
}