#include <bits/stdc++.h>
using namespace std;
#define ri register int
#define M 133335
struct dian{
int l,r,lpos,rpos,id,tim;
bool operator <(const dian t) const
{
if(lpos==t.lpos)
{
if(rpos==t.rpos)
{
return tim<t.tim;
}
return r<t.r;
}
return lpos<t.lpos;
}
}p[M];
struct gggg{
int goall,val;
}xiu[M];
int val[M];
int n,m;
void redyy()
{
scanf("%d%d",&n,&m);
for(ri i=1;i<=n;i++)
scanf("%d",&val[i]);
int d=pow(n,0.666);
int trmp=0,cent=0;
for(ri i=1;i<=m;i++)
{
char c;
cin>>c;
if(c=='Q')
{
int a,b;
scanf("%d%d",&a,&b);
p[++cent].l=a, p[cent].r=b, p[cent].id=cent, p[cent].tim=trmp;
p[cent].lpos=a/d;p[cent].rpos=b/d;
}
if(c=='R')
{
int a,b;
scanf("%d%d",&a,&b);
xiu[++trmp].goall=a;
xiu[trmp].val=b;
}
}
m=cent;
sort(p+1,p+1+m);
}
int num[M],cur;
int ans[M];
void jia(int a)
{
if(!num[val[a]]) cur++;
num[val[a]]++;
}
void jian(int a)
{
if(num[val[a]]==1) cur--;
num[val[a]]--;
}
void gai(int a,int i)
{
if(p[i].l<=xiu[a].goall&&xiu[a].goall<=p[i].r)
{
jian(xiu[a].goall);
swap(val[xiu[a].goall],xiu[a].val);
jia(xiu[a].goall);
}
else
swap(val[xiu[a].goall],xiu[a].val);
}
void solvee()
{
int l=p[1].l;
int r=l;
jia(r);
while(r<p[1].r) jia(++r);
int t=0;
while(t<p[1].tim) gai(++t,1);
ans[p[1].id]=cur;
for(ri i=2;i<=m;i++)
{
while(l<p[i].l) jian(l++);
while(l>p[i].l) jia(--l);
while(r<p[i].r) jia(++r);
while(r>p[i].r) jian(r--);
while(t<p[i].tim) gai(++t,i);
while(t>p[i].tim) gai(t--,i);
ans[p[i].id]=cur;
}
for(ri i=1;i<=m;i++)
printf("%d\n",ans[i]);
}
int main(){
redyy();
solvee();
return 0;
}