/*
ZADATAK: atomi
JEZIK: cpp
*/
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *fi=freopen("atomi.in","r",stdin);
FILE *fo=freopen("atomi.out","w",stdout);
#define MaxN 262144
int tabla[2*MaxN+2];

void Set(int v)
{
    v+=MaxN;
    if(tabla[v]) return;
    while(v)
     {
            tabla[v]++;
            v/=2;
        }
}

void Rem(int v)
{
    v+=MaxN;
    if(tabla[v]==0) return;
    while(v)
     {
            tabla[v]--;
            v/=2;
        }
}

int Desno(int a,int b,int l,int d,int ind);
int Levo(int a,int b,int l,int d,int ind);

int Max(int a,int b,int l,int d,int ind)
{
    //printf("  %d %d %d %d %d\n",a,b,l,d,ind);
    if(l>d) return -1000000;
    if(a==b) return tabla[ind];
    if((a==l) && (b==d) && (tabla[ind]==d-l+1)) return d-l+1;
    int m1,m2,m3;
    m1=Max(a,(a+b)/2,l,min((a+b)/2,d),ind*2);
    m2=Desno(a,(a+b)/2,l,min((a+b)/2,d),ind*2);
    m2+=Levo((a+b)/2+1,b,max((a+b)/2+1,l),d,ind*2+1);
    m3=Max((a+b)/2+1,b,max((a+b)/2+1,l),d,ind*2+1);
    return max(max(m1,m2),m3);
}

int Desno(int a,int b,int l,int d,int ind)
{
    if(l>d) return 0;
    if(a==b) return tabla[ind];
    if((a==l) && (b==d) && (tabla[ind]==d-l+1)) return d-l+1;
    if((tabla[ind*2+1]*2==b-a+1) && (l<(a+b)/2) && (d==b))return (b-a+1)/2+Desno(a,(a+b)/2,l,min(d,(a+b)/2),2*ind);
    else return Desno((a+b)/2+1,b,max(l,(a+b)/2+1),d,ind*2+1);
}

int Levo(int a,int b,int l,int d,int ind)
{
    if(l>d) return  0;
    if(a==b) return tabla[ind];
    if((a==l) && (b==d) && (tabla[ind]==d-l+1)) return d-l+1;
    if((tabla[2*ind]*2==b-a+1) && (a==l) && (d>=(a+b)/2)) return (b-a+1)/2+Levo((a+b)/2+1,b,max((a+b)/2+1,l),d,2*ind+1);
    else return Levo(a,(a+b)/2,l,min(d,(a+b)/2),ind*2);
}

int main()
{
    int n,m,i,x,kom,y;
   scanf("%d%d",&n,&m);
   for(i=1;i<=m;i++)
    {
        scanf("%d",&kom);
        if(kom==0)
         {
                scanf("%d",&x);
                x--;
                Rem(x);
            }
        else if(kom==1)
         {
                scanf("%d",&x);
                x--;
                Set(x);
            }
        else if(kom==2)
         {
                scanf("%d%d",&x,&y);
                x--;
                y--;
               /* for(int j=1;j<=MaxN*2;j++) 
                 {
                        printf("%d ",tabla[j]);
                    }
                printf("\n");*/
                printf("%d\n",Max(0,MaxN-1,x,y,1));
            }
    }
   return 0;
}
