#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MX = 4e5 + 5;
ll bit[MX];
vector<int> vals;
int n, q;
void upd(int i, int val) {
for (; i <= MX; i += i & (-i)) { bit[i] += val; }
}
void ad(int x, int b) {
int ind = upper_bound(vals.begin(), vals.end(), x) - vals.begin();
upd(ind, b);
}
ll sum(int x) {
ll res = 0;
for (; x; x -= x & (-x)) { res += bit[x]; }
return res;
}
ll query(int x) {
int ind = upper_bound(vals.begin(), vals.end(), x) - vals.begin();
return sum(ind);
}
int main() {
cin >> n >> q;
vector<int> ar(n);
for (int i = 0; i < n; i++) { cin >> ar[i]; }
vals = ar;
vector<array<int, 3>> rec;
for (int i = 0; i < q; i++) {
char t;
int a, b;
cin >> t >> a >> b;
rec.push_back({t == '?', a, b});
if (t == '!') vals.push_back(b);
}
sort(vals.begin(), vals.end());
vals.erase(unique(vals.begin(), vals.end()), vals.end());
for (int i = 0; i < n; i++) { ad(ar[i], 1); }
for (auto u : rec) {
u[1]--;
if (u[0] == 0) {
ad(ar[u[1]], -1);
ar[u[1]] = u[2];
ad(ar[u[1]], 1);
} else {
cout << query(u[2]) - query(u[1]) << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmNvbnN0IGludCBNWCA9IDRlNSArIDU7CgpsbCBiaXRbTVhdOwp2ZWN0b3I8aW50PiB2YWxzOwppbnQgbiwgcTsKCnZvaWQgdXBkKGludCBpLCBpbnQgdmFsKSB7Cglmb3IgKDsgaSA8PSBNWDsgaSArPSBpICYgKC1pKSkgeyBiaXRbaV0gKz0gdmFsOyB9Cn0KCnZvaWQgYWQoaW50IHgsIGludCBiKSB7CglpbnQgaW5kID0gdXBwZXJfYm91bmQodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpLCB4KSAtIHZhbHMuYmVnaW4oKTsKCXVwZChpbmQsIGIpOwp9CgpsbCBzdW0oaW50IHgpIHsKCWxsIHJlcyA9IDA7Cglmb3IgKDsgeDsgeCAtPSB4ICYgKC14KSkgeyByZXMgKz0gYml0W3hdOyB9CglyZXR1cm4gcmVzOwp9CgpsbCBxdWVyeShpbnQgeCkgewoJaW50IGluZCA9IHVwcGVyX2JvdW5kKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSwgeCkgLSB2YWxzLmJlZ2luKCk7CglyZXR1cm4gc3VtKGluZCk7Cn0KCmludCBtYWluKCkgewoJY2luID4+IG4gPj4gcTsKCXZlY3RvcjxpbnQ+IGFyKG4pOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsgY2luID4+IGFyW2ldOyB9Cgl2YWxzID0gYXI7Cgl2ZWN0b3I8YXJyYXk8aW50LCAzPj4gcmVjOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBxOyBpKyspIHsKCQljaGFyIHQ7CgkJaW50IGEsIGI7CgkJY2luID4+IHQgPj4gYSA+PiBiOwoJCXJlYy5wdXNoX2JhY2soe3QgPT0gJz8nLCBhLCBifSk7CgkJaWYgKHQgPT0gJyEnKSB2YWxzLnB1c2hfYmFjayhiKTsKCX0KCXNvcnQodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpKTsKCXZhbHMuZXJhc2UodW5pcXVlKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSksIHZhbHMuZW5kKCkpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsgYWQoYXJbaV0sIDEpOyB9Cglmb3IgKGF1dG8gdSA6IHJlYykgewoJCXVbMV0tLTsKCQlpZiAodVswXSA9PSAwKSB7CgkJCWFkKGFyW3VbMV1dLCAtMSk7CgkJCWFyW3VbMV1dID0gdVsyXTsKCQkJYWQoYXJbdVsxXV0sIDEpOwoJCX0gZWxzZSB7CgkJCWNvdXQgPDwgcXVlcnkodVsyXSkgLSBxdWVyeSh1WzFdKSA8PCAnXG4nOwoJCX0KCX0KfQ==