#include<bits/stdc++.h>
using namespace std;
const int N=133333+10;
const int M=1e6+10;
void read(){}
template<typename T,typename...T2>
inline void read(T&x,T2&...oth)
{
x=0;
int ch=getchar(),f=0;
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=1;
for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<1)+(x<<3)+(ch^48);
if(f)x=-x;
read(oth...);
}
inline void write(int x)
{
static int t[25];int tp=0;
if(x==0) return(void)(putchar('0'));else if(x<0) putchar('-'),x=-x;
while(x) t[tp++]=x%10,x/=10;
while(tp--) putchar(t[tp]+48);
putchar('\n');
}
int n,m,s,a[N],bl[N],ans[N];
int vis[M];
int cur,rcnt,qcnt;
struct Q{
int id,t,l,r;
}q[N];
struct R{
int p,x;
}rr[N];
void move(int k,int sign)
{
if(sign==1)
{
if(vis[k]==0)cur++;
vis[k]++;
}
else
{
if(vis[k]==1)cur--;
vis[k]--;
}
return;
}
bool cmp(Q aa,Q bb)
{
if(bl[aa.l]==bl[bb.l])return bl[aa.r]<bl[bb.r];
else return bl[aa.l]<bl[bb.l];
}
int main()
{
read(n,m);
s=pow(n,2.0/3.0);
for(int i=1;i<=n;i++)bl[i]=i%s!=1?bl[i-1]:bl[i-1]+1;
for(int i=1;i<=n;i++)read(a[i]);
for(int i=1;i<=m;i++)
{
char ch;
cin>>ch;
int x,y;
read(x,y);
if(ch=='R')rr[++rcnt]={x,y};
else q[++qcnt]={qcnt,rcnt,x,y};
}
sort(q+1,q+1+qcnt,cmp);
int l=1,r=0,la=0;
for(int i=1;i<=qcnt;i++)
{
while(l<q[i].l)move(a[l++],-1);
while(r>q[i].r)move(a[r--],-1);
while(l>q[i].l)move(a[--l],1);
while(r<q[i].r)move(a[++r],1);
while(la<q[i].t)
{
int pos=rr[++la].p;
if(pos>=l&&pos<=r)move(a[pos],-1),move(rr[la].x,1);
swap(rr[la].x,a[pos]);
}
while(la>q[i].t)
{
int pos=rr[la].p;
if(pos>=l&&pos<=r)move(a[pos],-1),move(rr[la].x,1);
swap(rr[la].x,a[pos]);
la--;
}
ans[q[i].id]=cur;
}
for(int i=1;i<=qcnt;i++)write(ans[i]);
return 0;
}