#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define f first
#define s second
#define mp make_pair
map<int, int> valtoID;
pair<int, pii> queries[(int)2e5+5];
int arr[(int)2e5+5];
ll fwt[(int)1e6];
ll sum(int i)
{
ll sum = 0;
while(i > 0){
sum += fwt[i];
i -= (i & -i); //least important bit
}
return sum;
}
ll query(int a, int b)
{
return sum(b) - sum(a - 1);
}
void update(int i, ll v)
{
while(i > 0 && i < 1e6){
fwt[i] += v;
i += (i & -i);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, q;
cin >> n >> q;
for(int i = 0; i < n; i++){
cin >> arr[i];
valtoID[arr[i]] = 0;
}
for(int i = 0; i < q; i++){
char t; int l, r, type; cin >> t >> l >> r;
valtoID[r] = 0;
if(t == '?'){
type = 2;
}
else{
type = 1;
valtoID[l] = 0;
}
queries[i] = mp(type, mp(l, r));
}
int ID = 1;
for(auto &t : valtoID){
t.s = ID++;
}
for(int i = 0; i < n; i++){
arr[i] = valtoID[arr[i]];
update(arr[i], 1);
}
for(int i = 0; i < q; i++){
int type = queries[i].f;
if(type == 1){
update(arr[queries[i].s.f - 1], -1);
int r = valtoID[queries[i].s.s];
arr[queries[i].s.f - 1] = r;
update(r, 1);
}
else{
int l = valtoID[queries[i].s.f];
int r = valtoID[queries[i].s.s];
cout << query(l, r) << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIGYgZmlyc3QKI2RlZmluZSBzIHNlY29uZAojZGVmaW5lIG1wIG1ha2VfcGFpcgogCiAKbWFwPGludCwgaW50PiB2YWx0b0lEOwpwYWlyPGludCwgcGlpPiBxdWVyaWVzWyhpbnQpMmU1KzVdOwppbnQgYXJyWyhpbnQpMmU1KzVdOwogCmxsIGZ3dFsoaW50KTFlNl07CmxsIHN1bShpbnQgaSkKewogICAgbGwgc3VtID0gMDsKICAgIHdoaWxlKGkgPiAwKXsKICAgICAgICBzdW0gKz0gZnd0W2ldOwogICAgICAgIGkgLT0gKGkgJiAtaSk7ICAvL2xlYXN0IGltcG9ydGFudCBiaXQKICAgIH0KICAgIHJldHVybiBzdW07Cn0KbGwgcXVlcnkoaW50IGEsIGludCBiKQp7CiAgICByZXR1cm4gc3VtKGIpIC0gc3VtKGEgLSAxKTsKfQp2b2lkIHVwZGF0ZShpbnQgaSwgbGwgdikKewogICAgd2hpbGUoaSA+IDAgJiYgaSA8IDFlNil7CiAgICAgICAgZnd0W2ldICs9IHY7CiAgICAgICAgaSArPSAoaSAmIC1pKTsKICAgIH0KfQogCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogCiAgICBpbnQgbiwgcTsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKICAgICAgICBjaW4gPj4gYXJyW2ldOwogICAgICAgIHZhbHRvSURbYXJyW2ldXSA9IDA7CiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgcTsgaSsrKXsKICAgICAgICBjaGFyIHQ7IGludCBsLCByLCB0eXBlOyBjaW4gPj4gdCA+PiBsID4+IHI7CiAgICAgICAgdmFsdG9JRFtyXSA9IDA7CiAgICAgICAgaWYodCA9PSAnPycpewogICAgICAgICAgICB0eXBlID0gMjsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgdHlwZSA9IDE7CiAgICAgICAgICAgIHZhbHRvSURbbF0gPSAwOwogICAgICAgIH0KICAgICAgICBxdWVyaWVzW2ldID0gbXAodHlwZSwgbXAobCwgcikpOwogICAgfQogICAgaW50IElEID0gMTsKICAgIGZvcihhdXRvICZ0IDogdmFsdG9JRCl7CiAgICAgICAgdC5zID0gSUQrKzsKICAgIH0KCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKICAgICAgICBhcnJbaV0gPSB2YWx0b0lEW2FycltpXV07CiAgICAgICAgdXBkYXRlKGFycltpXSwgMSk7CiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgcTsgaSsrKXsKICAgIAlpbnQgdHlwZSA9IHF1ZXJpZXNbaV0uZjsKICAgICAgICBpZih0eXBlID09IDEpewogICAgICAgICAgICB1cGRhdGUoYXJyW3F1ZXJpZXNbaV0ucy5mIC0gMV0sIC0xKTsKICAgICAgICAgICAgaW50IHIgPSB2YWx0b0lEW3F1ZXJpZXNbaV0ucy5zXTsKICAgICAgICAgICAgYXJyW3F1ZXJpZXNbaV0ucy5mIC0gMV0gPSByOwogICAgICAgICAgICB1cGRhdGUociwgMSk7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGludCBsID0gdmFsdG9JRFtxdWVyaWVzW2ldLnMuZl07CiAgICAgICAgICAgIGludCByID0gdmFsdG9JRFtxdWVyaWVzW2ldLnMuc107CiAgICAgICAgICAgIGNvdXQgPDwgcXVlcnkobCwgcikgPDwgZW5kbDsKICAgICAgICB9CiAgICB9CiAKICAgIHJldHVybiAwOwp9