#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define endl '\n'
using namespace std;
using namespace __gnu_pbds;
typedef pair<int, int> pii;
typedef tree<pii, null_type, less<pii>, rb_tree_tag, tree_order_statistics_node_update> OST;
const int N = 100001;
OST bit[N];
void insert(int x, int y)
{
for(int i = x; i < N; i += i & -i)
bit[i].insert({y, x});
}
void remove(int x, int y)
{
for(int i = x; i < N; i += i & -i)
bit[i].erase({y, x});
}
int query(int x, int y)
{
int ans = 0;
for(int i = x; i > 0; i -= i & -i){
ans += bit[i].order_of_key({y+1, 0});
}
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n,q;
cin>>n>>q;
vector<int> arr(n+1);
for(int i=1;i<=n;++i){
cin>>arr[i];
insert(i,arr[i]);
}
while(q--){
string op;
cin>>op;
if(op=="M"){
int i,x;
cin>>i>>x;
remove(i,arr[i]);
insert(i,x);
arr[i]=x;
}else{
int p,q,x;
cin>>p>>q>>x;
cout<<query(q,x)-query(p-1,x)<<endl;
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiNkZWZpbmUgZW5kbCAnXG4nCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiB0cmVlPHBpaSwgbnVsbF90eXBlLCBsZXNzPHBpaT4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+IE9TVDsKCmNvbnN0IGludCBOID0gMTAwMDAxOwoKT1NUIGJpdFtOXTsKCnZvaWQgaW5zZXJ0KGludCB4LCBpbnQgeSkKewoJZm9yKGludCBpID0geDsgaSA8IE47IGkgKz0gaSAmIC1pKQoJCWJpdFtpXS5pbnNlcnQoe3ksIHh9KTsKfQoKdm9pZCByZW1vdmUoaW50IHgsIGludCB5KQp7Cglmb3IoaW50IGkgPSB4OyBpIDwgTjsgaSArPSBpICYgLWkpCgkJYml0W2ldLmVyYXNlKHt5LCB4fSk7Cn0KCmludCBxdWVyeShpbnQgeCwgaW50IHkpCnsKCWludCBhbnMgPSAwOwoJZm9yKGludCBpID0geDsgaSA+IDA7IGkgLT0gaSAmIC1pKXsKCQlhbnMgKz0gYml0W2ldLm9yZGVyX29mX2tleSh7eSsxLCAwfSk7Cgl9CglyZXR1cm4gYW5zOwp9CgoKaW50IG1haW4oKXsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCWNpbi50aWUoMCk7CglpbnQgbixxOwoJY2luPj5uPj5xOwoJdmVjdG9yPGludD4gYXJyKG4rMSk7Cglmb3IoaW50IGk9MTtpPD1uOysraSl7CgkJY2luPj5hcnJbaV07CgkJaW5zZXJ0KGksYXJyW2ldKTsKCX0KCXdoaWxlKHEtLSl7CgkJc3RyaW5nIG9wOwoJCWNpbj4+b3A7CgkJaWYob3A9PSJNIil7CgkJCWludCBpLHg7CgkJCWNpbj4+aT4+eDsKCQkJcmVtb3ZlKGksYXJyW2ldKTsKCQkJaW5zZXJ0KGkseCk7CgkJCWFycltpXT14OwoJCX1lbHNlewoJCQlpbnQgcCxxLHg7CgkJCWNpbj4+cD4+cT4+eDsKCQkJY291dDw8cXVlcnkocSx4KS1xdWVyeShwLTEseCk8PGVuZGw7CgkJfQoJfQp9