#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int ans[N],n,m,k;char ch;
int c[N],s[N],T,sum,t1,t2;
int ul[N],uv[N];
struct node
{
int l,r,id,up;
}opr[N];
bool cmp(node a,node b)
{
if(a.l/T==b.l/T)return a.r<b.r;
return a.l<b.l;
}
void Delete(int val)
{
c[s[val]]--;
if(c[s[val]]==0)sum--;
}
void Insert(int val)
{
if(c[s[val]]==0)sum++;
c[s[val]]++;
}
void Upd(int x,int l,int r)
{
if(l<=x&&x<=r)Delete(ul[x]);
swap(uv[x],s[x]);
if(l<=x&&x<=r)Insert(ul[x]);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m;T=sqrt(n);
for(int i=1;i<=n;i++)cin>>s[i];
for(int i=1;i<=m;i++)
{
cin>>ch;
if(ch=='Q'){
opr[++t1].id=t1;opr[t1].up=t2;
cin>>opr[t1].l>>opr[t1].r;
}
else
cin>>ul[++t2]>>uv[t2];
}
sort(opr+1,opr+t1+1,cmp);
int dx=1,dy=0,dq=0;
for(int i=1;i<=t1;i++)
{
int qx=opr[i].l,qy=opr[i].r,qp=opr[i].up;
while(dq<qp){Upd(++dq,qx,qy);}
while(dx>qx){Insert(--dx);}
while(dy<qy){Insert(++dy);}
while(dq>qp){Upd(dq--,qx,qy);}
while(dx<qx){Delete(dx++);}
while(dy>qy){Delete(dy--);}
ans[opr[i].id]=sum;
}
for(int i=1;i<=t1;i++)cout<<ans[i]<<"\n";
}