/*
ZADATAK: atomi
JEZIK: C++
*/

#include <stdio.h>

FILE *fin, *fout;

long int maxl[1000001];

long int n, m;

inline void Ubaci(long int i)
{
    if(i > 1)   
        
        maxl[i] = maxl[i - 1] + 1;   

    else
    
        maxl[i] = 1;    

    long int pom = 1;
    
    while(maxl[i + pom] == pom && (i + pom <= n))
    {
        maxl[pom + i] += maxl[i];   
        
        pom++;          
    }
}

inline void Izbaci(long int i)
{   
    long int pom = 1;
    
    while(maxl[i + pom] > pom && (i + pom <= n))
    {
        maxl[pom + i] -= maxl[i]; 
        
        pom++;            
    }
    
    maxl[i] = 0;
}

inline void Upit(long int a, long int b)
{
    long int pom, max = 0;
    
    pom = b;
    
    while(pom >= a)
    {
        if(maxl[pom] > pom - a + 1)
        {
            if(max < maxl[pom] - maxl[a] + 1)
            
               max = maxl[pom] - maxl[a] + 1;         
        } 
        else
        {
            if(max < maxl[pom])
            
               max = maxl[pom];
        }
        
        if(maxl[pom] == 0)
           
            pom--;
        
        else
        
            pom -= maxl[pom];         
    }   
    
    fprintf(fout, "%ld\n", max);
}

int main()
{
    fin = fopen("atomi.in", "r");
    
    fout = fopen("atomi.out", "w");
    
    fscanf(fin, "%ld %ld\n", &n, &m);
    
    long int i;
    
    int kom;
    
    long int a, b;
    
    for(i = 1; i <= n; i++)
    
        maxl[i] = 0;
    
    for(i = 1; i <= m; i++)
    {
        fscanf(fin, "%d ", &kom);
        
        if(kom == 0)
        {
            fscanf(fin, "%ld\n", &a);
            
            Izbaci(a);       
        }
        
        if(kom == 1)
        {
            fscanf(fin, "%ld\n", &a);
            
            Ubaci(a);       
        }      
        
        if(kom == 2)
        {
            fscanf(fin, "%ld %ld\n", &a, &b);
            
            Upit(a, b);       
        }
    }
    
    return 0;
}
