#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define Ed for(int i=h[x];~i;i=ne[i])
#define Ls(i,l,r) for(int i=l;i<r;++i)
#define Rs(i,l,r) for(int i=l;i>r;--i)
#define Le(i,l,r) for(int i=l;i<=r;++i)
#define Re(i,l,r) for(int i=l;i>=r;--i)
#define L(i,l) for(int i=0;i<l;++i)
#define E(i,l) for(int i=1;i<=l;++i)
#define W(t) while(t--)
#define Wh while
namespace fstIO{
const char _fg='\n';
int _len=0;
char ibuf[(1<<20)+1],*iS,*iT,_out[(1<<25)+1],_ar[50];
#define _gh()\
(iS==iT?iT=(iS=ibuf)+fread(ibuf,1,(1<<20)+1,stdin),\
(iS==iT?EOF:*iS++):*iS++)
#define putc(ch) _out[_len++]=ch
void read(){}
template<typename Type,typename...Types>
void read(Type&x,Types&...xs){
x=0;
char ch=_gh();
char t=0;
while(ch<'0'||ch>'9')t|=ch=='-',ch=_gh();
while(ch>='0'&&ch<='9')x=x*10+(ch^48),ch=_gh();
x=t?-x:x;
read(xs...);
}
template<typename Type>
void write(Type x){
int tot=0;
if(!x)putc('0');
if(x<0)putc('-'),x=-x;
while(x)_ar[++tot]=x%10+'0',x/=10;
for(int i=tot;i;--i)putc(_ar[i]);
putc(_fg);
}
void flush(){
fwrite(_out,1,_len,stdout);
_len=0;
}
}
using namespace fstIO;
const int N=133343,M=1000010;
int n,m,a[N],len,qt,ct,b[N],res,ans[N],cnt[M];
struct query{
int id,l,r,t;
}q[N];
struct modify{
int p,c;
}c[N];
bool cmp(const query &A,const query &B){
int al=b[A.l],bl=b[B.l];
int ar=b[A.r],br=b[B.r];
if(al^bl)return al<bl;
if(ar^br)return ar<br;
return A.t<B.t;
}
#define add(x) (cnt[x]++)||(++res)
#define del(x) (--cnt[x])||(--res)
int main(){
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
read(n,m);
E(i, n)read(a[i]);
E(i, m){
char op=_gh();
int l,r;
read(l,r);
if(op=='Q')q[++qt]={qt,l,r,ct};
else c[++ct]={l,r};
}
len=cbrt((double)n*ct);
!len&&(len=1);
E(i, n)b[i]=i/len;
int i=0,j=1,t=0;
sort(q+1,q+1+qt,cmp);
E(k, qt){
int id=q[k].id,l=q[k].l,r=q[k].r,tm=q[k].t;
while(i<r)add(a[++i]);
while(i>r)del(a[i--]);
while(j<l)del(a[j++]);
while(j>l)add(a[--j]);
while(t<tm){
++t;
if(l<=c[t].p&&c[t].p<=r){
del(a[c[t].p]);
add(c[t].c);
}
swap(a[c[t].p],c[t].c);
}
while(t>tm){
if(l<=c[t].p&&c[t].p<=r){
del(a[c[t].p]);
add(c[t].c);
}
swap(a[c[t].p],c[t].c);
t--;
}
ans[id]=res;
}
E(i, qt)write(ans[i]);
flush();
return 0;
}