#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<int> vi;
typedef vector<long long> vll;
typedef vector<vector<int>> vvi;
typedef vector<vll> vvll;
typedef vector<pair<int, int>> vpi;
typedef vector<vpi> vvpi;
typedef pair<int, int> pi;
typedef pair<ll, ll> pll;
typedef vector<pll> vpll;
const long long mod = 1000000007;
#define MEM(a, b) memset(a, (b), sizeof(a))
#define all(c) (c).begin(), (c).end()
#define srt(c) sort(all(c))
#define all_r(c) (c).rbegin(), (c).rend()
#define reverse_sort(c) sort(all_r(c))
#define sf(a) scanf("%d", &a)
#define pf(a) printf("%d\n", a)
#define unique(a) a.erase(unique(all(a)), a.end()) // ssseeesss would be ses
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define Check cout << "Done in " << clock() / CLOCKS_PER_SEC << " sec" << endl;
#define FastRead ios_base::sync_with_stdio(false);
using namespace __gnu_pbds;
typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
// ================================== take ip/op like vector,pairs directly!==================================
template<typename typC,typename typD> istream &operator>>(istream &cin,pair<typC,typD> &a) { return cin>>a.first>>a.second; }
template<typename typC> istream &operator>>(istream &cin,vector<typC> &a) { for (auto &x:a) cin>>x; return cin; }
template<typename typC,typename typD> ostream &operator<<(ostream &cout,const pair<typC,typD> &a) { return cout<<a.first<<' '<<a.second; }
template<typename typC,typename typD> ostream &operator<<(ostream &cout,const vector<pair<typC,typD>> &a) { for (auto &x:a) cout<<x<<'\n'; return cout; }
template<typename typC> ostream &operator<<(ostream &cout,const vector<typC> &a) { int n=a.size(); if (!n) return cout; cout<<a[0]; for (int i=1; i<n; i++) cout<<' '<<a[i]; return cout; }
// ===================================END Of the input module ==========================================
void solve() {
ll n,t;
cin >> n>>t;
vi v(n);
cin >> v;
//ordered_set m;
ordered_set m;
unordered_map<int,int> ma;
for(int i=0;i<n;i++){
ma[i+1]=v[i];
m.insert(v[i]);
}
while(t--){
char c;int x,y;
cin >> c >> x >> y;
if(c=='?'){
int lessThanY=m.order_of_key(y+1);
int lessThanX=m.order_of_key(x);
cout<<lessThanY-lessThanX<<endl;
}
else{
int toRemove=ma[x];
//cout<<toRemove<<" hhhhh "<<*m.upper_bound(toRemove)<<endl;
m.erase(m.upper_bound(toRemove));
ma[x]=y;
m.insert(y);
}
}
}
int main() {
FastRead;
int t = 1;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4gLy8gQ29tbW9uIGZpbGUKI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+IC8vIEluY2x1ZGluZyB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGUKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgdmVjdG9yPGxvbmcgbG9uZz4gdmxsOwp0eXBlZGVmIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gdnZpOwp0eXBlZGVmIHZlY3Rvcjx2bGw+IHZ2bGw7CnR5cGVkZWYgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiB2cGk7CnR5cGVkZWYgdmVjdG9yPHZwaT4gdnZwaTsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwp0eXBlZGVmIHZlY3RvcjxwbGw+IHZwbGw7CmNvbnN0IGxvbmcgbG9uZyBtb2QgPSAxMDAwMDAwMDA3OwojZGVmaW5lIE1FTShhLCBiKSBtZW1zZXQoYSwgKGIpLCBzaXplb2YoYSkpCiNkZWZpbmUgYWxsKGMpIChjKS5iZWdpbigpLCAoYykuZW5kKCkKI2RlZmluZSBzcnQoYykgc29ydChhbGwoYykpCiNkZWZpbmUgYWxsX3IoYykgKGMpLnJiZWdpbigpLCAoYykucmVuZCgpCiNkZWZpbmUgcmV2ZXJzZV9zb3J0KGMpIHNvcnQoYWxsX3IoYykpCiNkZWZpbmUgc2YoYSkgc2NhbmYoIiVkIiwgJmEpCiNkZWZpbmUgcGYoYSkgcHJpbnRmKCIlZFxuIiwgYSkKI2RlZmluZSB1bmlxdWUoYSkgYS5lcmFzZSh1bmlxdWUoYWxsKGEpKSwgYS5lbmQoKSkgLy8gc3NzZWVlc3NzIHdvdWxkIGJlIHNlcwojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAojZGVmaW5lIENoZWNrIGNvdXQgPDwgIkRvbmUgaW4gIiA8PCBjbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMgPDwgIiBzZWMiIDw8IGVuZGw7CiNkZWZpbmUgRmFzdFJlYWQgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp0eXBlZGVmIHRyZWU8bGwsIG51bGxfdHlwZSwgbGVzc19lcXVhbDxsbD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+IG9yZGVyZWRfc2V0OwoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSB0YWtlIGlwL29wIGxpa2UgdmVjdG9yLHBhaXJzIGRpcmVjdGx5IT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KdGVtcGxhdGU8dHlwZW5hbWUgdHlwQyx0eXBlbmFtZSB0eXBEPiBpc3RyZWFtICZvcGVyYXRvcj4+KGlzdHJlYW0gJmNpbixwYWlyPHR5cEMsdHlwRD4gJmEpIHsgcmV0dXJuIGNpbj4+YS5maXJzdD4+YS5zZWNvbmQ7IH0KdGVtcGxhdGU8dHlwZW5hbWUgdHlwQz4gaXN0cmVhbSAmb3BlcmF0b3I+Pihpc3RyZWFtICZjaW4sdmVjdG9yPHR5cEM+ICZhKSB7IGZvciAoYXV0byAmeDphKSBjaW4+Png7IHJldHVybiBjaW47IH0KdGVtcGxhdGU8dHlwZW5hbWUgdHlwQyx0eXBlbmFtZSB0eXBEPiBvc3RyZWFtICZvcGVyYXRvcjw8KG9zdHJlYW0gJmNvdXQsY29uc3QgcGFpcjx0eXBDLHR5cEQ+ICZhKSB7IHJldHVybiBjb3V0PDxhLmZpcnN0PDwnICc8PGEuc2Vjb25kOyB9CnRlbXBsYXRlPHR5cGVuYW1lIHR5cEMsdHlwZW5hbWUgdHlwRD4gb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZjb3V0LGNvbnN0IHZlY3RvcjxwYWlyPHR5cEMsdHlwRD4+ICZhKSB7IGZvciAoYXV0byAmeDphKSBjb3V0PDx4PDwnXG4nOyByZXR1cm4gY291dDsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSB0eXBDPiBvc3RyZWFtICZvcGVyYXRvcjw8KG9zdHJlYW0gJmNvdXQsY29uc3QgdmVjdG9yPHR5cEM+ICZhKSB7IGludCBuPWEuc2l6ZSgpOyBpZiAoIW4pIHJldHVybiBjb3V0OyBjb3V0PDxhWzBdOyBmb3IgKGludCBpPTE7IGk8bjsgaSsrKSBjb3V0PDwnICc8PGFbaV07IHJldHVybiBjb3V0OyB9Ci8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09RU5EIE9mIHRoZSBpbnB1dCBtb2R1bGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgp2b2lkIHNvbHZlKCkgewogIGxsIG4sdDsKICBjaW4gPj4gbj4+dDsKICB2aSB2KG4pOwogIGNpbiA+PiB2OwogIC8vb3JkZXJlZF9zZXQgbTsKICBvcmRlcmVkX3NldCBtOwogIHVub3JkZXJlZF9tYXA8aW50LGludD4gbWE7CiAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICBtYVtpKzFdPXZbaV07CiAgICBtLmluc2VydCh2W2ldKTsKICB9CiAgd2hpbGUodC0tKXsKICAgICBjaGFyIGM7aW50IHgseTsKICAgICBjaW4gPj4gYyA+PiB4ID4+IHk7CiAgICAgaWYoYz09Jz8nKXsKICAgICAgICBpbnQgbGVzc1RoYW5ZPW0ub3JkZXJfb2Zfa2V5KHkrMSk7CiAgICAgICAgaW50IGxlc3NUaGFuWD1tLm9yZGVyX29mX2tleSh4KTsKICAgICAgICBjb3V0PDxsZXNzVGhhblktbGVzc1RoYW5YPDxlbmRsOwogICAgIH0KICAgICBlbHNlewogICAgICAgIGludCB0b1JlbW92ZT1tYVt4XTsKICAgICAgICAvL2NvdXQ8PHRvUmVtb3ZlPDwiIGhoaGhoICI8PCptLnVwcGVyX2JvdW5kKHRvUmVtb3ZlKTw8ZW5kbDsKICAgICAgICBtLmVyYXNlKG0udXBwZXJfYm91bmQodG9SZW1vdmUpKTsKICAgICAgICBtYVt4XT15OwogICAgICAgIG0uaW5zZXJ0KHkpOwogICAgIH0KICB9Cgp9CgppbnQgbWFpbigpIHsKICBGYXN0UmVhZDsKICBpbnQgdCA9IDE7CiAgd2hpbGUgKHQtLSkgewogICAgc29sdmUoKTsKICB9CiAgcmV0dXJuIDA7Cn0=