#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+IDA7IGkgLT0gaSAmIC1pKQoJCWFucyArPSBiaXRbaV0ub3JkZXJfb2Zfa2V5KHt5KzEsIDB9KTsKCXJldHVybiBhbnM7Cn0KCgppbnQgbWFpbigpewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZSgwKTsKCWludCBuLHE7CgljaW4+Pm4+PnE7Cgl2ZWN0b3I8aW50PiBhcnIobisxKTsKCWZvcihpbnQgaT0xO2k8PW47KytpKXsKCQljaW4+PmFycltpXTsKCQlpbnNlcnQoaSxhcnJbaV0pOwoJfQoJd2hpbGUocS0tKXsKCQlzdHJpbmcgb3A7CgkJY2luPj5vcDsKCQlpZihvcD09Ik0iKXsKCQkJaW50IGkseDsKCQkJY2luPj5pPj54OwoJCQlyZW1vdmUoaSxhcnJbaV0pOwoJCQlpbnNlcnQoaSx4KTsKCQkJYXJyW2ldPXg7CgkJfWVsc2V7CgkJCWludCBwLHEseDsKCQkJY2luPj5wPj5xPj54OwoJCQljb3V0PDxxdWVyeShxLHgpLXF1ZXJ5KHAtMSx4KTw8ZW5kbDsKCQl9Cgl9Cn0=