别人都是只WA最后三个点的qwq
#include<bits/stdc++.h>
#define deb
//#define int long long
using namespace std;
const int maxn=2e5;
const int maxp=pow(maxn,2.0/3.0);
struct ass{
int id,l,r,t;
}Q[maxn];
struct ope{
int t,pos,v;
}O[maxn];
int c1,c2,n,p,m,cnt[int(1e6+5)],a[maxn],ann;
bool cmp(ass a,ass b){
if(a.l/p==b.l/p){
return a.r/p==b.r/p?a.t<b.t:a.r<b.r;
}
else{
return a.l<b.l;
}
}
int l=1,r=1,t=1,pp=1;
void op(int x){
if(l<=x&&x<=r){
cnt[a[O[x].pos]]--;
if(!cnt[a[O[x].pos]]){
ann--;
}
if(!cnt[O[x].v]){
ann++;
}
cnt[O[x].v]++;
}
swap(O[x].v,a[O[x].pos]);
}
void add(int x){
if(!cnt[a[x]]){
ann++;
}
cnt[a[x]]++;
}
int ans[maxn];
void del(int x){
cnt[a[x]]--;
if(!cnt[a[x]]){
ann--;
}
}
signed main(){
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// cout<<"Hello World!\n";
cin>>n>>m;
p=pow(n,0.666);
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
int l,r;
char op;
cin>>op>>l>>r;
if(op=='Q'){
Q[++c1].id=c1;
Q[c1].l=l;
Q[c1].r=r;
Q[c1].t=i;
}
else{
O[++c2].pos=l;
O[c2].t=i;
O[c2].v=r;
}
}
sort(Q+1,Q+1+c1,cmp);
add(1);
for(int i=1;i<=c1;i++){
while(l<Q[i].l){
del(l);
l++;
}
while(l>Q[i].l){
l--;
add(l);
}
while(r>Q[i].r){
del(r);
r--;
}
while(r<Q[i].r){
r++;
add(r);
}
while(O[pp].t<Q[i].t&&pp<=c2){
op(pp);
pp++;
}
while(O[pp-1].t>Q[i].t&&pp){
op(pp-1);
pp--;
}
ans[Q[i].id]=ann;
}
for(int i=1;i<=c1;i++){
cout<<ans[i]<<'\n';
}
return 0;
}