/*
ZADATAK: atomi
JEZIK: c++
*/

// Atomi, SIO 2007
// Autor zadatka : Rajko Nenadov

/*
resenje nosi : 70 poena
vremenska slozenost : O(M * sqrt(N))
prostorna slozenost : O(N)
*/

#include <iostream>
#include <cstdio>
using namespace std;

const long MaxN = 1000005;
const long SqrtMaxN = 1005;

long n, m;
bool postoji[MaxN];
long levo[SqrtMaxN], desno[SqrtMaxN], najveci[SqrtMaxN];
long korak;

FILE *fin, *fout;

void update(long x){
    long mesto=x/korak;

    long nl=0;
    for (long i=mesto*korak; postoji[i] && i<(mesto+1)*korak; i++) nl++;
    levo[mesto]=nl;

    long nd=0;
    for (long i=(mesto+1)*korak - 1; postoji[i] && i>=mesto*korak; i--) nd++;
    desno[mesto]=nd;

    najveci[mesto]=0;
    long naj=0;
    for (long i=mesto*korak; i<(mesto+1)*korak; i++){
        if (postoji[i]) naj++;
        else{
            najveci[mesto]>?=naj;
            naj=0;
        }
    }
    najveci[mesto]>?=naj;
}

void dodaj(long x){
    postoji[x]=true;
    update(x);
}

void izbaci(long x){
    postoji[x]=false;
    update(x);
}

long prebroj(long a, long b){
    long reta = 0;
    long m1 = a/korak, m2= b/korak;
    if (m1 == m2){
        long brojac = 0;
        for (long i=a; i<=b; i++){
            if (postoji[i]) brojac++;
            else{
                reta>?=brojac;
                brojac=0;
            }
        }
        reta>?=brojac;
    }
    else{
        long brojac = 0;
        for (long i=a; i<(m1 + 1)*korak; i++){
            if (postoji[i]) brojac++;
            else{
                reta>?=brojac;
                brojac=0;
            }
        }
        for (long i=m1+1; i<m2; i++){
            reta>?=najveci[i];

            brojac+=levo[i];
            reta>?=brojac;

            if (levo[i]!=korak) brojac=desno[i];
        }
        for (long i=m2*korak; i<=b; i++){
            if (postoji[i]) brojac++;
            else{
                reta>?=brojac;
                brojac=0;
            }
        }
        reta>?=brojac;
    }

    return reta;
}

int main(){
    fin=fopen("atomi.in","r");
    fout=fopen("atomi.out","w");

    memset(postoji,0,sizeof(postoji));
    fscanf(fin,"%ld %ld",&n,&m);
  while (korak * korak < n) korak++;

    long op,x,a,b;
    for (long k=0; k<m; k++){
        fscanf(fin,"%ld",&op);
        if (op == 0){
            fscanf(fin,"%ld",&x);
            izbaci(x);
        }
        else if (op == 1){
            fscanf(fin,"%ld",&x);
            dodaj(x);
        }
        else{
            fscanf(fin,"%ld %ld",&a,&b);
            fprintf(fout,"%ld\n",prebroj(a,b));
        }
    }

    fclose(fin); fclose(fout);
    return 0;
}

