#include <bits/stdc++.h>
using namespace std;
int n,q,a[100005],ans[100005],k;
pair<int,int>last[100005];
char ch[100005];
int l,r,cnt[200005],sum=0,len,c;
unordered_map<int,int>mp;
int ct=0;
struct node
{
int l,r,t,k,id;
};
vector<node>x;
bool cmp(node a,node b)
{
if(a.l/len!=b.l/len)return a.l/len>b.l/len;
else if(a.r/len!=b.r/len)return a.r/len>b.r/len;
return a.t>b.t;
}
void add(int x)
{
cnt[a[x]]++;
}
void del(int x)
{
cnt[a[x]]--;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(!mp.count(a[i]))mp[a[i]]=++ct;
a[i]=mp[a[i]];
}
len=pow(n,0.666);
for(int i=1;i<=q;i++)
{
cin>>ch[i];
if(ch[i]=='Q')
{
node u;
cin>>u.l>>u.r>>u.k;
if(!mp.count(u.k))mp[u.k]=++ct;
u.k=mp[u.k];
u.t=c;
u.id=i;
x.push_back(u);
}
else
{
c++;
cin>>last[c].first>>last[c].second;
}
}
sort(x.begin(),x.end(),cmp);
int l=1,r=0,t=0;
for(int i=0;i<x.size();i++)
{
int p=x[i].id;
while(x[i].l<l)add(l-1),l--;
while(x[i].l>l)del(l),l++;
while(x[i].r>r)add(r+1),r++;
while(x[i].r<r)del(r),r--;
while(x[i].t>t)
{
t++;
if(l<=last[t].first&&last[t].first<=r)
{
del(last[t].first);
swap(a[last[t].first],last[t].second);
add(last[t].first);
}
else swap(a[last[t].first],last[t].second);
}
while(x[i].t<t)
{
if(l<=last[t].first&&last[t].first<=r)
{
del(last[t].first);
swap(a[last[t].first],last[t].second);
add(last[t].first);
}
else swap(a[last[t].first],last[t].second);
t--;
}
ans[p]=cnt[x[i].k];
}
for(int i=1;i<=q;i++)if(ch[i]=='Q')cout<<ans[i]<<endl;
return 0;
}