#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
cin.tie(0);
ios_base::sync_with_stdio(0);
int n, q;
cin >> n >> q;
vector<int> p(n);
vector<tuple<char, int, int>> queries;
vector<int> val_set;
for(int i = 0; i < n; i++){
cin >> p[i];
val_set.push_back(p[i]);
}
for(int i = 0; i < q; i++){
char op;
int a, b;
cin >> op >> a >> b;
if(op == '?') val_set.push_back(a);
else a--;
val_set.push_back(b);
queries.push_back({op, a, b});
}
sort(val_set.begin(), val_set.end());
val_set.resize(unique(val_set.begin(), val_set.end()) - val_set.begin());
for(auto &p_val: p){
p_val = lower_bound(val_set.begin(), val_set.end(), p_val) - val_set.begin();
}
for(auto &[op, a, b]: queries){
if(op == '?') a = lower_bound(val_set.begin(), val_set.end(), a) - val_set.begin();
b = lower_bound(val_set.begin(), val_set.end(), b) - val_set.begin();
}
vector<int> BITS(val_set.size() + 1);
auto update = [&BITS](int pos, int val){
while(pos < BITS.size()){
BITS[pos] += val;
pos += pos & -pos;
}
};
auto query = [&BITS](int pos){
int ans = 0;
while(pos){
ans += BITS[pos];
pos -= pos & -pos;
}
return ans;
};
for(auto &p_val: p){
update(p_val + 1, 1);
}
for(auto &[op, a, b]: queries){
if(op == '?') cout << query(b + 1) - query(a) << '\n';
else{
update(p[a] + 1, -1);
p[a] = b;
update(p[a] + 1, 1);
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CgljaW4udGllKDApOwoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKCQoJaW50IG4sIHE7CgljaW4gPj4gbiA+PiBxOwoJdmVjdG9yPGludD4gcChuKTsKCXZlY3Rvcjx0dXBsZTxjaGFyLCBpbnQsIGludD4+IHF1ZXJpZXM7Cgl2ZWN0b3I8aW50PiB2YWxfc2V0OwoJCglmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKCQljaW4gPj4gcFtpXTsKCQl2YWxfc2V0LnB1c2hfYmFjayhwW2ldKTsKCX0KCQoJZm9yKGludCBpID0gMDsgaSA8IHE7IGkrKyl7CgkJY2hhciBvcDsKCQlpbnQgYSwgYjsKCQljaW4gPj4gb3AgPj4gYSA+PiBiOwoJCWlmKG9wID09ICc/JykgdmFsX3NldC5wdXNoX2JhY2soYSk7CgkJZWxzZSBhLS07CgkJdmFsX3NldC5wdXNoX2JhY2soYik7CgkJcXVlcmllcy5wdXNoX2JhY2soe29wLCBhLCBifSk7Cgl9CgkKCXNvcnQodmFsX3NldC5iZWdpbigpLCB2YWxfc2V0LmVuZCgpKTsKCXZhbF9zZXQucmVzaXplKHVuaXF1ZSh2YWxfc2V0LmJlZ2luKCksIHZhbF9zZXQuZW5kKCkpIC0gdmFsX3NldC5iZWdpbigpKTsKCQoJZm9yKGF1dG8gJnBfdmFsOiBwKXsKCQlwX3ZhbCA9IGxvd2VyX2JvdW5kKHZhbF9zZXQuYmVnaW4oKSwgdmFsX3NldC5lbmQoKSwgcF92YWwpIC0gdmFsX3NldC5iZWdpbigpOwoJfQoJZm9yKGF1dG8gJltvcCwgYSwgYl06IHF1ZXJpZXMpewoJCWlmKG9wID09ICc/JykgYSA9IGxvd2VyX2JvdW5kKHZhbF9zZXQuYmVnaW4oKSwgdmFsX3NldC5lbmQoKSwgYSkgLSB2YWxfc2V0LmJlZ2luKCk7CgkJYiA9IGxvd2VyX2JvdW5kKHZhbF9zZXQuYmVnaW4oKSwgdmFsX3NldC5lbmQoKSwgYikgLSB2YWxfc2V0LmJlZ2luKCk7Cgl9CgkKCXZlY3RvcjxpbnQ+IEJJVFModmFsX3NldC5zaXplKCkgKyAxKTsKCWF1dG8gdXBkYXRlID0gWyZCSVRTXShpbnQgcG9zLCBpbnQgdmFsKXsKCQl3aGlsZShwb3MgPCBCSVRTLnNpemUoKSl7CgkJCUJJVFNbcG9zXSArPSB2YWw7CgkJCXBvcyArPSBwb3MgJiAtcG9zOwoJCX0KCX07CglhdXRvIHF1ZXJ5ID0gWyZCSVRTXShpbnQgcG9zKXsKCQlpbnQgYW5zID0gMDsKCQl3aGlsZShwb3MpewoJCQlhbnMgKz0gQklUU1twb3NdOwoJCQlwb3MgLT0gcG9zICYgLXBvczsKCQl9CgkJcmV0dXJuIGFuczsKCX07CgkKCWZvcihhdXRvICZwX3ZhbDogcCl7CgkJdXBkYXRlKHBfdmFsICsgMSwgMSk7Cgl9CgkKCWZvcihhdXRvICZbb3AsIGEsIGJdOiBxdWVyaWVzKXsKCQlpZihvcCA9PSAnPycpIGNvdXQgPDwgcXVlcnkoYiArIDEpIC0gcXVlcnkoYSkgPDwgJ1xuJzsKCQllbHNlewoJCQl1cGRhdGUocFthXSArIDEsIC0xKTsKCQkJcFthXSA9IGI7CgkJCXVwZGF0ZShwW2FdICsgMSwgMSk7CgkJfQoJfQoJcmV0dXJuIDA7Cn0=