#include<stdio.h>
long a[100000],c[100000],n,m,i,j,aa,f,p,p1,cc,s,ac[100],max;
long partit(long a[],long st,long dr)
{long m,mm,i,j,aa;
m=(st+dr)/2;
mm=a[m];
i=st-1;
j=dr+1;
while(i<j)
{
do{++i;}while(a[i]<mm&&i<m);
do{--j;}while(a[j]>mm&&j>m);
if(i<j)
{
aa=a[i];
a[i]=a[j];
a[j]=aa;
aa=c[i];
c[i]=c[j];
c[j]=aa;
++i;
--j;
}
}
return j+1;
}
void qsort(long a[],long st,long dr)
{long p;
if(st<dr)
{
p=partit(a,st,dr);
qsort(a,st,p-1);
qsort(a,p,dr);
}
}
int main()
{
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(i=1;i<=n;++i)
scanf("%ld%ld",&a[i],&c[i]);
// qsort(a,1,n);
for(i=1;i<n;++i)
for(j=i+1;j<=n;++j)
if(a[i]>a[j])
{aa=a[i];
a[i]=a[j];
a[j]=aa;
aa=c[i];
c[i]=c[j];
c[j]=aa;
}
for(i=1;i<=m;++i)
{
scanf("%ld%ld%ld",&f,&p,&p1);
if(f==0)
{cc=c[p];
j=1;
while(a[++j]<p1)
{a[j-1]=a[j];
c[j-1]=c[j];}
a[j-1]=p1;
c[j-1]=cc;
}
else
{
for(j=1;j<=n;++j)
if(a[j]>=p&&a[j]<=p1)
++ac[c[j]];
max=0;
for(j=1;j<=64;++j)
{if(ac[j]>max)
max=ac[j]; ac[j]=0;}
printf("%ld\n",max);}
}
return 0;
}