#include<bits/stdc++.h>
using namespace std;
int n,m,a[143323],b[1000001],block,ans[143323],answ,cnt;
struct ques
{
int l,r,id,t;
}q1[143323],q2[143323];
bool cmp(ques x,ques y)
{
if(x.l/block==y.l/block)
{
if(x.r/block==y.r/block)return x.t<y.t;
return x.r<y.r;
}
return x.l<y.l;
}
inline void add(int x)
{
if(b[x]==0)answ++;
b[x]++;
}
inline void del(int x)
{
b[x]--;
if(b[x]==0)answ--;
}
inline void updata(int x,int t)
{
if(q1[x].l<=q2[t].l && q2[t].l<=q1[x].r)
{
del(a[q2[t].l]);
add(q2[t].r);
}
swap(a[q2[t].l],q2[t].r);
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
block=pow(n,0.666);
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++)
{
int x,y;
char op;
cin>>op>>x>>y;
if(op=='Q')
{
q1[++cnt].l=x;
q1[cnt].r=y;
q1[cnt].t=i-cnt;
q1[cnt].id=cnt;
}
else
q2[i-cnt].l=x,q2[i-cnt].r=y;
}
sort(q1+1,q1+m+1,cmp);
int l=1,r=0,now=q1[1].t;
for(int i=1;i<=m;i++)
{
while(r<q1[i].r)add(a[++r]);
while(l<q1[i].l)del(a[l++]);
while(r>q1[i].r)del(a[r--]);
while(l>q1[i].l)add(a[--l]);
while(now>q1[i].t)updata(i,now--);
while(now<q1[i].t)updata(i,++now);
ans[q1[i].id]=answ;
}
for(int i=1;i<=cnt;i++)
cout<<ans[i]<<endl;
return 0;
}