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

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <memory.h>

int sl[100000];
int pret[100000];
int a[100000];
int i,n,j,m,l,tek,pom,br,pocetak,kraj,x,y,max,tekmax;

int main()
{
    freopen("atomi.in","r",stdin);
    freopen("atomi.out","w",stdout);
    scanf("%d%d",&n,&m);
    tek=0; l=0;
    for (br=1;br<=m;br++)
    {
     scanf("%d",&i);
     switch (i)
     {
      case 0:
            scanf("%d",&j);
            pom=pocetak; 
            if (l>0)
            {
              pom=pocetak;
              while ((pom!=kraj)&&(a[pom]<j)) pom=sl[pom];
              if (a[pom]==j)
                if (pom==kraj)
                {
                 l--;
                 sl[pret[kraj]]=-1; kraj=pret[kraj];             
                }
                else if (pom==pocetak)
                {
                 l--; pret[sl[pocetak]]=-1; pocetak=sl[pocetak];   
                }            
                else
                {
                 l--; sl[pret[pom]]=sl[pom]; pret[sl[pom]]=pret[pom];  
                }
            }
           break;
      case 1:
            tek++;
            scanf("%d",&j);
            if (l>0)
            {
              pom=pocetak;
              while ((pom!=kraj)&&(a[pom]<j)) pom=sl[pom];
              if (pom==kraj)
               if (a[pom]<j)
               {
                a[tek]=j; sl[tek]=-1; pret[tek]=kraj; sl[kraj]=tek; kraj=tek; l++;            
               }
               else
               {
                a[tek]=j; sl[tek]=kraj; pret[tek]=pret[kraj]; sl[pret[kraj]]=tek; pret[kraj]=tek; l++;    
               }
              else if (a[pom]!=j)
                    if (pom!=pocetak)
                    {
                     a[tek]=j; sl[pret[pom]]=tek; pret[tek]=pret[pom];
                     sl[tek]=pom; pret[pom]=tek; l++;                
                    }
                    else
                    {
                     a[tek]=j; sl[tek]=pocetak; pret[tek]=-1; 
                     pret[pocetak]=tek; pocetak=tek; l++; 
                    }
                   else tek--; 
            }
            else
            {
             l=1; pocetak=tek; kraj=tek; a[tek]=j; sl[tek]=-1; pret[tek]=-1;   
            }
           break;
      case 2: 
            scanf("%d%d",&x,&y);
            pom=pocetak;
            if (l>2){
            while ((pom!=kraj)&&(a[pom]<x)) pom=sl[pom];
            if (pom==kraj) if ((a[pom]>=x)&&(a[pom]<=y)) printf("1\n"); else printf("0\n");
             else if (a[pom]<=y)
                  {
                   max=1;
                   tekmax=1;
                   pom=sl[pom];
                   while ((pom!=kraj)&&(a[pom]<=y))
                   {
                     if (a[pom]==a[pret[pom]]+1)
                      tekmax++;
                      else {
                            if (tekmax>max) max=tekmax;
                            tekmax=1;
                           }
                     pom=sl[pom];    
                   }
                   if ((pom==kraj)&&(a[pom]<=y)&&(a[pom]==a[pret[pom]]+1)) tekmax++;
                   if (tekmax>max) printf("%d\n",tekmax);
                    else printf("%d\n",max);
                  }
                  else printf("0\n");
             }
             else if (l==0) printf("0\n");
               else if ((a[kraj]>=x)&&(a[kraj]<=y)) printf("1\n");
                else printf("0\n");
           break;
     }
    }
    return 0;
}
