#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,q,v=0,a[200005],bit[1000006];
pair <char,pair<int,int>> p[200005];
void UPDATE(int i, int V)
{
while (i<=v) bit[i]+=V,i+=i&(-i);
return;
}
int GET(int l, int r)
{
l--;
int resl=0,resr=0;
while (l>0) resl+=bit[l],l-=l&(-l);
while (r>0) resr+=bit[r],r-=r&(-r);
return resr-resl;
}
void READINPUT()
{
set <int> se;
map <int,int> mp;
cin>>n>>q;
for (int i=1;i<=n;i++) cin>>a[i],se.insert(a[i]);
for (int i=1;i<=q;i++)
{
cin>>p[i].first>>p[i].second.first>>p[i].second.second;
if (p[i].first=='!') se.insert(p[i].second.second);
else se.insert(p[i].second.first),se.insert(p[i].second.second);
}
for (int x : se) v++,mp[x]=v;
for (int i=1;i<=n;i++) a[i]=mp[a[i]];
for (int i=1;i<=q;i++)
{
if (p[i].first=='!') p[i].second.second=mp[p[i].second.second];
else p[i].second.first=mp[p[i].second.first],p[i].second.second=mp[p[i].second.second];
}
}
signed main()
{
ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
READINPUT();
for (int i=1;i<=n;i++) UPDATE(a[i],1);
for (int i=1;i<=q;i++)
{
if (p[i].first=='!')
{
UPDATE(p[i].second.second,1);
UPDATE(a[p[i].second.first],-1);
a[p[i].second.first]=p[i].second.second;
}
else cout<<GET(p[i].second.first,p[i].second.second)<<'\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbixxLHY9MCxhWzIwMDAwNV0sYml0WzEwMDAwMDZdOwpwYWlyIDxjaGFyLHBhaXI8aW50LGludD4+IHBbMjAwMDA1XTsKdm9pZCBVUERBVEUoaW50IGksIGludCBWKQp7CiAgICB3aGlsZSAoaTw9dikgYml0W2ldKz1WLGkrPWkmKC1pKTsKICAgIHJldHVybjsKfQppbnQgR0VUKGludCBsLCBpbnQgcikKewogICAgbC0tOwogICAgaW50IHJlc2w9MCxyZXNyPTA7CiAgICB3aGlsZSAobD4wKSByZXNsKz1iaXRbbF0sbC09bCYoLWwpOwogICAgd2hpbGUgKHI+MCkgcmVzcis9Yml0W3JdLHItPXImKC1yKTsKICAgIHJldHVybiByZXNyLXJlc2w7Cn0Kdm9pZCBSRUFESU5QVVQoKQp7CiAgICBzZXQgPGludD4gc2U7CiAgICBtYXAgPGludCxpbnQ+IG1wOwogICAgY2luPj5uPj5xOwogICAgZm9yIChpbnQgaT0xO2k8PW47aSsrKSBjaW4+PmFbaV0sc2UuaW5zZXJ0KGFbaV0pOwogICAgZm9yIChpbnQgaT0xO2k8PXE7aSsrKQogICAgewogICAgICAgIGNpbj4+cFtpXS5maXJzdD4+cFtpXS5zZWNvbmQuZmlyc3Q+PnBbaV0uc2Vjb25kLnNlY29uZDsKICAgICAgICBpZiAocFtpXS5maXJzdD09JyEnKSBzZS5pbnNlcnQocFtpXS5zZWNvbmQuc2Vjb25kKTsKICAgICAgICBlbHNlIHNlLmluc2VydChwW2ldLnNlY29uZC5maXJzdCksc2UuaW5zZXJ0KHBbaV0uc2Vjb25kLnNlY29uZCk7CiAgICB9CiAgICBmb3IgKGludCB4IDogc2UpIHYrKyxtcFt4XT12OwogICAgZm9yIChpbnQgaT0xO2k8PW47aSsrKSBhW2ldPW1wW2FbaV1dOwogICAgZm9yIChpbnQgaT0xO2k8PXE7aSsrKQogICAgewogICAgICAgIGlmIChwW2ldLmZpcnN0PT0nIScpIHBbaV0uc2Vjb25kLnNlY29uZD1tcFtwW2ldLnNlY29uZC5zZWNvbmRdOwogICAgICAgIGVsc2UgcFtpXS5zZWNvbmQuZmlyc3Q9bXBbcFtpXS5zZWNvbmQuZmlyc3RdLHBbaV0uc2Vjb25kLnNlY29uZD1tcFtwW2ldLnNlY29uZC5zZWNvbmRdOwogICAgfQp9CnNpZ25lZCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSksY2luLnRpZSgwKSxjb3V0LnRpZSgwKTsKICAgIFJFQURJTlBVVCgpOwogICAgZm9yIChpbnQgaT0xO2k8PW47aSsrKSBVUERBVEUoYVtpXSwxKTsKICAgIGZvciAoaW50IGk9MTtpPD1xO2krKykKICAgIHsKICAgICAgICBpZiAocFtpXS5maXJzdD09JyEnKQogICAgICAgIHsKICAgICAgICAgICAgVVBEQVRFKHBbaV0uc2Vjb25kLnNlY29uZCwxKTsKICAgICAgICAgICAgVVBEQVRFKGFbcFtpXS5zZWNvbmQuZmlyc3RdLC0xKTsKICAgICAgICAgICAgYVtwW2ldLnNlY29uZC5maXJzdF09cFtpXS5zZWNvbmQuc2Vjb25kOwogICAgICAgIH0KICAgICAgICBlbHNlIGNvdXQ8PEdFVChwW2ldLnNlY29uZC5maXJzdCxwW2ldLnNlY29uZC5zZWNvbmQpPDwnXG4nOwogICAgfQogICAgcmV0dXJuIDA7Cn0=