#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
map<int,int>bj;
int a[N],totq,totp,len,Ans[N],n,m;
struct data
{
int l,r,id,ti,kk;
}q[N],p[N];
bool cmp(data x,data y)
{
if(x.l/len!=y.l/len)
return x.l<y.l;
if(x.r!=y.r)
return x.r<y.r;
return x.ti<y.ti;
}
void upt(int ti,int li)
{
if(q[li].l<=p[ti].l&&p[ti].l<=q[li].r)
bj[a[p[ti].l]]--,bj[p[ti].r]++;
swap(a[p[ti].l],p[ti].r);
}
void add(int x)
{
bj[a[x]]++;
}
void del(int x)
{
bj[a[x]]--;
}
int main()
{
scanf("%d%d",&n,&m);
len=pow(n,2.00/3.00);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
char ch;
for(int i=1,l,r,k;i<=m;++i)
{
scanf("\n%c",&ch);
if(ch=='Q')
{
scanf("%d%d%d",&l,&r,&k);
q[++totq].l=l,q[totq].r=r,q[totq].kk=k,q[totq].id=totq,q[totq].ti=totp;
}
else
{
scanf("%d%d",&l,&r);
p[++totp].l=l,p[totp].r=r;
}
}
sort(q+1,q+totq+1,cmp);
for(int i=q[1].l;i<=q[1].r;++i)
bj[a[i]]++;
for(int i=1;i<=q[1].ti;++i)
upt(i,1);
Ans[q[1].id]=bj[q[1].kk];
int l=q[1].l,r=q[1].r,ti=q[1].ti;
for(int i=2;i<=totq;++i)
{
while(q[i].l<l) add(--l);
while(q[i].r>r) add(++r);
while(q[i].l>l) del(l++);
while(q[i].r<r) del(r--);
while(q[i].ti>ti) upt(++ti,i);
while(q[i].ti<ti) upt(ti--,i);
Ans[q[i].id]=bj[q[i].kk];
}
for(int i=1;i<=totq;++i)
printf("%d\n",Ans[i]);
}
RT