#include<bits/stdc++.h>
using namespace std;
#define ll int
ll n,m,a[1303335],mp[1000006],ls,rs,cnt,blk,t,sum,ans[1330335];
struct node{
ll x,y,z;
}r[1303335],q[1303335];
char opt;
bool cmp(node c,node d){
if(c.x/blk!=d.x/blk){
return c.x<d.x;
}
if(c.y/blk!=d.y/blk) return c.y<d.y;
return c.z<d.z;
}
void add(ll p,ll num){
if(num==1){
if(!mp[p]) ++sum;
++mp[p];
}
else{
if(mp[p]==1) --sum;
--mp[p];
}
}
int main(){
cin>>n>>m;
blk=pow(n,0.667)+1;
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
for(int i=1;i<=m;++i){
scanf("%c",&opt);
cin>>opt;
if(opt=='R') scanf("%d%d",&r[i].x,&r[i].y),ans[i]=-1;
else
cnt++,scanf("%d%d",&q[cnt].x,&q[cnt].y),q[cnt].z=i;
}
sort(q+1,q+1+cnt,cmp);
ls=rs=1;
sum=mp[a[1]]=1;
for(int i=1;i<=cnt;++i){
while(ls<q[i].x){
add(a[ls],-1);
++ls;
}
while(ls>q[i].x){
--ls;
add(a[ls],1);
}
while(rs<q[i].y){
++rs;
add(a[rs],1);
}
while(rs>q[i].y){
add(a[rs],-1);
--rs;
}
while(t<q[i].z){
++t;
if(r[t].y){
if(r[t].x<=rs&&r[t].x>=ls){
add(a[r[t].x],-1);
add(r[t].y,1);
}
swap(r[t].y,a[r[t].x]);
}
}
while(t>q[i].z){
--t;
if(r[t].y){
if(r[t].x<=rs&&r[t].x>=ls){
add(a[r[t].x],-1);
add(r[t].y,1);
}
swap(r[t].y,a[r[t].x]);
}
}
ans[q[i].z]=sum;
}
for(int i=1;i<=m;++i){
if(ans[i]!=-1) printf("%d\n",ans[i]);
}
}