#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define ull unsigned long long int
#define ld long double
#define cout(var) cout<<var<<endl
#define endl '\n'
#define loop(a,b,c) for(ll i=a;i<=b;i+=c)
#define intarr(arr,n) ll arr[n];for(ll i=0;i<n;i++)cin>>arr[i]
#define inparr(arr,n) for(ll i=0;i<n;i++)cin>>arr[i]
#define inpvec(vec,n) for(ll i=0;i<n;i++){ll var;cin>>var;vec.push_back(var);}
#define pb push_back
#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);
#define mod 1000000007
#define newline cout<<endl
#define ump unordered_map<ll,ll>
#define vec vector<ll>
#define mkp make_pair
#define disp(var) cout<<var<<" "
bool prime(ll n)
{
if (n <= 1) return false;
if (n <= 3) return true;
if (n%2 == 0 || n%3 == 0) return false;
for (ll i=5; i*i<=n; i=i+6)
if (n%i == 0 || n%(i+2) == 0)
return false;
return true;
}
ll power(ll x,ll y)
{
ll temp;
if(y==0)
return 1;
temp=power(x,y/2);
if (y%2==0)
return temp*temp;
else
return x*temp*temp;
}
ll no_of_factors(ll n)
{
ll cnt = 0;
for (ll i = 1; i <= sqrt(n); i++)
{
if (n % i == 0)
{
if (n / i == i)
cnt++;
else
cnt = cnt + 2;
}
}
return cnt;
}
ll gcd(ll a,ll b)
{
if (b==0)
return a;
return gcd(b,a%b);
}
bool subsequence_checker(string str1, string str2, ll m, ll n)
{
if (m == 0) return true;
if (n == 0) return false;
if (str1[m-1] == str2[n-1])
return subsequence_checker(str1, str2, m-1, n-1);
return subsequence_checker(str1, str2, m, n-1);
}
bool isPowerOfTwo (ll x)
{
return x && (!(x&(x-1)));
}
bool incs(ll *a,ll n)
{
if(n==1)
return true;
for(ll i=0;i<n-1;i++)
{
if(a[i+1]<=a[i])
return false;
}
return true;
}
bool decs(ll *a,ll n)
{
if(n==1)
return true;
for(ll i=0;i<n-1;i++)
{
if(a[i+1]>=a[i])
return false;
}
return true;
}
struct test
{
public:
ll x,y,z;
};
bool compare(const test &aa,const test &bb)
{
if(aa.x==bb.x)
{
if(aa.y==bb.y)
{
return aa.z<bb.z;
}
return aa.y<bb.y;
}
return aa.x<bb.x;
}
ll mm(ll a, ll m=mod)
{
ll m0 = m;
ll y = 0, x = 1;
if (m == 1)
return 0;
while (a > 1)
{
// q is quotient
ll q = a / m;
ll t = m;
// m is remainder now, process same as
// Euclid's algo
m = a % m, a = t;
t = y;
// Update y and x
y = x - q * y;
x = t;
}
// Make x positive
if (x < 0)
x += m0;
return x;
}
ll bs=1357;
ll cnt=0;
ll f[1000001]={0};
ll a[200001];
vector<pair<pair<ll,ll>,ll>> upd;
unordered_map<ll,pair<ll,ll>> mp;
struct query
{
ll l,r,i,up;
};
query qu[200001];
ll ans[200001];
bool comp(query a,query b)
{
if(a.l/bs!=b.l/bs)
{
return a.l/bs<b.l/bs;
}
if(a.r/bs!=b.r/bs)
return a.r<b.r;
return a.up<=b.up;
}
void add(ll pos)
{
ll ele=a[pos];
f[ele]++;
if(f[ele]==1)
cnt+=ele;
}
void remove(ll pos)
{
//cout<<a[pos]<<endl;
ll ele=a[pos];
f[ele]--;
if(f[ele]==0)
cnt-=ele;
}
void updatekaro(ll ct,ll left,ll right)
{
ll x=upd[ct].first.first;
ll y=upd[ct].first.second;
ll oldvalue=mp[x].second;
a[x]=y;
mp[x].second=y;
//cout<<x<<y<<oldvalue<<endl;
if(x>=left && x<=right)
{
f[oldvalue]--;
if(f[oldvalue]==0)
cnt-=oldvalue;
f[y]++;
if(f[y]==1)
cnt+=y;
}
}
void updatehatao(ll ct,ll left,ll right)
{
ll x=upd[ct].first.first;
ll y=upd[ct].first.second;
ll oldvalue=mp[x].second;
a[x]=y;
mp[x].second=y;
if(x>=left && x<=right)
{
f[oldvalue]--;
if(f[oldvalue]==0)
cnt-=oldvalue;
f[y]++;
if(f[y]==1)
cnt+=y;
}
}
void AcDegaYe()
{
ll n,q;
cin>>n>>q;
for(ll i=0;i<n;i++)
cin>>a[i];
ll no;
ll updtillnow=0,x,y,in=0;
for(ll i=0;i<q;i++)
{
char ch;
cin>>ch;
if(ch=='Q')
{
cin>>qu[in].l>>qu[in].r;
qu[in].l--;
qu[in].r--;
qu[in].i=in;
qu[in].up=updtillnow;
in++;
}
else
{
cin>>x>>y;
x--;
upd.pb(mkp(mkp(x,y),a[x]));
mp[x]=mkp(y,a[x]);
updtillnow++;
}
}
sort(qu,qu+in,comp);
ll ml=0,mr=-1,currenttime=0;
for(ll i=0;i<in;i++)
{
ll left=qu[i].l;
ll right=qu[i].r;
while(ml>left)
{
ml--;
add(ml);
}
while(mr<right)
{
mr++;
add(mr);
}
while(ml<left)
{
remove(ml);
ml++;
}
while(mr>right)
{
remove(mr);
mr--;
}
while(currenttime<qu[i].up)
{
updatekaro(currenttime,left,right);
currenttime++;
}
while(currenttime>qu[i].up)
{
updatehatao(currenttime,left,right);
currenttime--;
}
ans[qu[i].i]=cnt;
// for(ll i=0;i<n;i++)
// cout<<a[i]<<" ";
// cout<<endl;
}
for(ll i=0;i<in;i++)
{
cout(ans[i]);
}
}
int main()
{
fastio;
//ll t;
//cin>>t;
ll t=1;
while(t--)
{
AcDegaYe();
}
cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAojZGVmaW5lIGxsIGxvbmcgbG9uZyBpbnQKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nIGludAojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgY291dCh2YXIpIGNvdXQ8PHZhcjw8ZW5kbAojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIGxvb3AoYSxiLGMpIGZvcihsbCBpPWE7aTw9YjtpKz1jKQojZGVmaW5lIGludGFycihhcnIsbikgbGwgYXJyW25dO2ZvcihsbCBpPTA7aTxuO2krKyljaW4+PmFycltpXQojZGVmaW5lIGlucGFycihhcnIsbikgZm9yKGxsIGk9MDtpPG47aSsrKWNpbj4+YXJyW2ldCiNkZWZpbmUgaW5wdmVjKHZlYyxuKSBmb3IobGwgaT0wO2k8bjtpKyspe2xsIHZhcjtjaW4+PnZhcjt2ZWMucHVzaF9iYWNrKHZhcik7fQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZhc3RpbyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKE5VTEwpOwojZGVmaW5lIG1vZCAxMDAwMDAwMDA3CiNkZWZpbmUgbmV3bGluZSBjb3V0PDxlbmRsCiNkZWZpbmUgdW1wIHVub3JkZXJlZF9tYXA8bGwsbGw+CiNkZWZpbmUgdmVjIHZlY3RvcjxsbD4KI2RlZmluZSBta3AgbWFrZV9wYWlyCiNkZWZpbmUgZGlzcCh2YXIpIGNvdXQ8PHZhcjw8IiAiCmJvb2wgcHJpbWUobGwgbikgCnsgCiAgICBpZiAobiA8PSAxKSAgcmV0dXJuIGZhbHNlOyAKICAgIGlmIChuIDw9IDMpICByZXR1cm4gdHJ1ZTsgCiAgICBpZiAobiUyID09IDAgfHwgbiUzID09IDApIHJldHVybiBmYWxzZTsgCiAgCiAgICBmb3IgKGxsIGk9NTsgaSppPD1uOyBpPWkrNikgCiAgICAgICAgaWYgKG4laSA9PSAwIHx8IG4lKGkrMikgPT0gMCkgCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAKICAKICAgIHJldHVybiB0cnVlOyAKfQpsbCBwb3dlcihsbCB4LGxsIHkpIAp7IAogICAgbGwgdGVtcDsgCiAgICBpZih5PT0wKSAKICAgICAgICByZXR1cm4gMTsgCiAgICB0ZW1wPXBvd2VyKHgseS8yKTsgCiAgICBpZiAoeSUyPT0wKSAKICAgICAgICByZXR1cm4gdGVtcCp0ZW1wOyAKICAgIGVsc2UKICAgICAgICByZXR1cm4geCp0ZW1wKnRlbXA7IAp9IApsbCBub19vZl9mYWN0b3JzKGxsIG4pIAp7IAogICAgbGwgY250ID0gMDsgCiAgICBmb3IgKGxsIGkgPSAxOyBpIDw9IHNxcnQobik7IGkrKykgCiAgICB7IAogICAgICAgIGlmIChuICUgaSA9PSAwKSAKICAgICAgICB7IAogICAgICAgICAgICBpZiAobiAvIGkgPT0gaSkgCiAgICAgICAgICAgICAgICBjbnQrKzsgCiAgCiAgICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAgICBjbnQgPSBjbnQgKyAyOyAKICAgICAgICB9IAogICAgfSAKICAgIHJldHVybiBjbnQ7IAp9IApsbCBnY2QobGwgYSxsbCBiKSAKeyAKICAgIGlmIChiPT0wKSAKICAgICAgICByZXR1cm4gYTsgCiAgICByZXR1cm4gZ2NkKGIsYSViKTsgICAgICAKfSAKYm9vbCBzdWJzZXF1ZW5jZV9jaGVja2VyKHN0cmluZyBzdHIxLCBzdHJpbmcgc3RyMiwgbGwgbSwgbGwgbikgCnsgCiAgICBpZiAobSA9PSAwKSByZXR1cm4gdHJ1ZTsgCiAgICBpZiAobiA9PSAwKSByZXR1cm4gZmFsc2U7IAogICAgaWYgKHN0cjFbbS0xXSA9PSBzdHIyW24tMV0pIAogICAgICAgIHJldHVybiBzdWJzZXF1ZW5jZV9jaGVja2VyKHN0cjEsIHN0cjIsIG0tMSwgbi0xKTsgCiAgICByZXR1cm4gc3Vic2VxdWVuY2VfY2hlY2tlcihzdHIxLCBzdHIyLCBtLCBuLTEpOyAKfQpib29sIGlzUG93ZXJPZlR3byAobGwgeCkgIAp7ICAKICAgIHJldHVybiB4ICYmICghKHgmKHgtMSkpKTsgIAp9ICAKYm9vbCBpbmNzKGxsICphLGxsIG4pCnsKICAgIGlmKG49PTEpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICBmb3IobGwgaT0wO2k8bi0xO2krKykKICAgIHsKICAgICAgICBpZihhW2krMV08PWFbaV0pCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CmJvb2wgZGVjcyhsbCAqYSxsbCBuKQp7CiAgICBpZihuPT0xKQogICAgICAgIHJldHVybiB0cnVlOwogICAgZm9yKGxsIGk9MDtpPG4tMTtpKyspCiAgICB7CiAgICAgICAgaWYoYVtpKzFdPj1hW2ldKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQpzdHJ1Y3QgdGVzdAp7CnB1YmxpYzoKICAgIGxsIHgseSx6Owp9Owpib29sIGNvbXBhcmUoY29uc3QgdGVzdCAmYWEsY29uc3QgdGVzdCAmYmIpCnsKICAgIGlmKGFhLng9PWJiLngpCiAgICB7CiAgICAgICAgaWYoYWEueT09YmIueSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBhYS56PGJiLno7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhYS55PGJiLnk7CiAgICB9CiAgICByZXR1cm4gYWEueDxiYi54Owp9CgpsbCBtbShsbCBhLCBsbCBtPW1vZCkgCnsgCiAgICBsbCBtMCA9IG07IAogICAgbGwgeSA9IDAsIHggPSAxOyAKICAKICAgIGlmIChtID09IDEpIAogICAgICByZXR1cm4gMDsgCiAgCiAgICB3aGlsZSAoYSA+IDEpIAogICAgeyAKICAgICAgICAvLyBxIGlzIHF1b3RpZW50IAogICAgICAgIGxsIHEgPSBhIC8gbTsgCiAgICAgICAgbGwgdCA9IG07IAogIAogICAgICAgIC8vIG0gaXMgcmVtYWluZGVyIG5vdywgcHJvY2VzcyBzYW1lIGFzIAogICAgICAgIC8vIEV1Y2xpZCdzIGFsZ28gCiAgICAgICAgbSA9IGEgJSBtLCBhID0gdDsgCiAgICAgICAgdCA9IHk7IAogIAogICAgICAgIC8vIFVwZGF0ZSB5IGFuZCB4IAogICAgICAgIHkgPSB4IC0gcSAqIHk7IAogICAgICAgIHggPSB0OyAKICAgIH0gCiAgCiAgICAvLyBNYWtlIHggcG9zaXRpdmUgCiAgICBpZiAoeCA8IDApIAogICAgICAgeCArPSBtMDsgCiAgCiAgICByZXR1cm4geDsgCn0gCmxsIGJzPTEzNTc7CmxsIGNudD0wOwpsbCBmWzEwMDAwMDFdPXswfTsKbGwgYVsyMDAwMDFdOwp2ZWN0b3I8cGFpcjxwYWlyPGxsLGxsPixsbD4+IHVwZDsKdW5vcmRlcmVkX21hcDxsbCxwYWlyPGxsLGxsPj4gbXA7CnN0cnVjdCBxdWVyeQp7CiAgICBsbCBsLHIsaSx1cDsKfTsKcXVlcnkgcXVbMjAwMDAxXTsKbGwgYW5zWzIwMDAwMV07CmJvb2wgY29tcChxdWVyeSBhLHF1ZXJ5IGIpCnsKICAgIGlmKGEubC9icyE9Yi5sL2JzKQogICAgewogICAgICAgIHJldHVybiBhLmwvYnM8Yi5sL2JzOwogICAgfQogICAgaWYoYS5yL2JzIT1iLnIvYnMpCiAgICAgICAgcmV0dXJuIGEucjxiLnI7CiAgICByZXR1cm4gYS51cDw9Yi51cDsKfQp2b2lkIGFkZChsbCBwb3MpCnsKICAgIGxsIGVsZT1hW3Bvc107CiAgICBmW2VsZV0rKzsKICAgIGlmKGZbZWxlXT09MSkKICAgICAgICBjbnQrPWVsZTsKfQp2b2lkIHJlbW92ZShsbCBwb3MpCnsKICAgIC8vY291dDw8YVtwb3NdPDxlbmRsOwogICAgbGwgZWxlPWFbcG9zXTsKICAgIGZbZWxlXS0tOwogICAgaWYoZltlbGVdPT0wKQogICAgICAgIGNudC09ZWxlOwp9CnZvaWQgdXBkYXRla2FybyhsbCBjdCxsbCBsZWZ0LGxsIHJpZ2h0KQp7CiAgICBsbCB4PXVwZFtjdF0uZmlyc3QuZmlyc3Q7CiAgICBsbCB5PXVwZFtjdF0uZmlyc3Quc2Vjb25kOwogICAgbGwgb2xkdmFsdWU9bXBbeF0uc2Vjb25kOwogICAgYVt4XT15OwogICAgbXBbeF0uc2Vjb25kPXk7CiAgICAvL2NvdXQ8PHg8PHk8PG9sZHZhbHVlPDxlbmRsOwogICAgaWYoeD49bGVmdCAmJiB4PD1yaWdodCkKICAgIHsKICAgICAgICBmW29sZHZhbHVlXS0tOwogICAgICAgIGlmKGZbb2xkdmFsdWVdPT0wKQogICAgICAgICAgICBjbnQtPW9sZHZhbHVlOwogICAgICAgIGZbeV0rKzsKICAgICAgICBpZihmW3ldPT0xKQogICAgICAgICAgICBjbnQrPXk7CiAgICB9Cn0Kdm9pZCB1cGRhdGVoYXRhbyhsbCBjdCxsbCBsZWZ0LGxsIHJpZ2h0KQp7CiAgICBsbCB4PXVwZFtjdF0uZmlyc3QuZmlyc3Q7CiAgICBsbCB5PXVwZFtjdF0uZmlyc3Quc2Vjb25kOwogICAgbGwgb2xkdmFsdWU9bXBbeF0uc2Vjb25kOwogICAgYVt4XT15OwogICAgbXBbeF0uc2Vjb25kPXk7CiAgICBpZih4Pj1sZWZ0ICYmIHg8PXJpZ2h0KQogICAgewogICAgICAgIGZbb2xkdmFsdWVdLS07CiAgICAgICAgaWYoZltvbGR2YWx1ZV09PTApCiAgICAgICAgICAgIGNudC09b2xkdmFsdWU7CiAgICAgICAgZlt5XSsrOwogICAgICAgIGlmKGZbeV09PTEpCiAgICAgICAgICAgIGNudCs9eTsKICAgIH0KCn0Kdm9pZCBBY0RlZ2FZZSgpCnsKICAgIGxsIG4scTsKICAgIGNpbj4+bj4+cTsKICAgIGZvcihsbCBpPTA7aTxuO2krKykKICAgICAgICBjaW4+PmFbaV07CiAgICBsbCBubzsKICAgIGxsIHVwZHRpbGxub3c9MCx4LHksaW49MDsKICAgIGZvcihsbCBpPTA7aTxxO2krKykKICAgIHsKICAgICAgICBjaGFyIGNoOwogICAgICAgIGNpbj4+Y2g7CiAgICAgICAgaWYoY2g9PSdRJykKICAgICAgICB7CiAgICAgICAgICAgIGNpbj4+cXVbaW5dLmw+PnF1W2luXS5yOwogICAgICAgICAgICBxdVtpbl0ubC0tOwogICAgICAgICAgICBxdVtpbl0uci0tOwogICAgICAgICAgICBxdVtpbl0uaT1pbjsKICAgICAgICAgICAgcXVbaW5dLnVwPXVwZHRpbGxub3c7CiAgICAgICAgICAgIGluKys7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGNpbj4+eD4+eTsKICAgICAgICAgICAgeC0tOwogICAgICAgICAgICB1cGQucGIobWtwKG1rcCh4LHkpLGFbeF0pKTsKICAgICAgICAgICAgbXBbeF09bWtwKHksYVt4XSk7CiAgICAgICAgICAgIHVwZHRpbGxub3crKzsKICAgICAgICB9CiAgICB9CiAgICBzb3J0KHF1LHF1K2luLGNvbXApOwogICAgbGwgbWw9MCxtcj0tMSxjdXJyZW50dGltZT0wOwogICAgZm9yKGxsIGk9MDtpPGluO2krKykKICAgIHsKICAgICAgICBsbCBsZWZ0PXF1W2ldLmw7CiAgICAgICAgbGwgcmlnaHQ9cXVbaV0ucjsKICAgICAgICB3aGlsZShtbD5sZWZ0KQogICAgICAgIHsKICAgICAgICAgICAgbWwtLTsKICAgICAgICAgICAgYWRkKG1sKTsKICAgICAgICB9CiAgICAgICAgd2hpbGUobXI8cmlnaHQpCiAgICAgICAgewogICAgICAgICAgICBtcisrOwogICAgICAgICAgICBhZGQobXIpOwogICAgICAgIH0KICAgICAgICB3aGlsZShtbDxsZWZ0KQogICAgICAgIHsKICAgICAgICAgICAgcmVtb3ZlKG1sKTsKICAgICAgICAgICAgbWwrKzsKICAgICAgICB9CiAgICAgICAgd2hpbGUobXI+cmlnaHQpCiAgICAgICAgewogICAgICAgICAgICByZW1vdmUobXIpOwogICAgICAgICAgICBtci0tOwogICAgICAgIH0KICAgICAgICB3aGlsZShjdXJyZW50dGltZTxxdVtpXS51cCkKICAgICAgICB7CiAgICAgICAgICAgIHVwZGF0ZWthcm8oY3VycmVudHRpbWUsbGVmdCxyaWdodCk7CiAgICAgICAgICAgIGN1cnJlbnR0aW1lKys7CiAgICAgICAgfQogICAgICAgIHdoaWxlKGN1cnJlbnR0aW1lPnF1W2ldLnVwKQogICAgICAgIHsKICAgICAgICAgICAgdXBkYXRlaGF0YW8oY3VycmVudHRpbWUsbGVmdCxyaWdodCk7CiAgICAgICAgICAgIGN1cnJlbnR0aW1lLS07CiAgICAgICAgfQogICAgICAgIGFuc1txdVtpXS5pXT1jbnQ7CiAgICAvLyAgICAgZm9yKGxsIGk9MDtpPG47aSsrKQogICAgLy8gICAgIGNvdXQ8PGFbaV08PCIgIjsKICAgIC8vIGNvdXQ8PGVuZGw7CiAgICB9CiAgICBmb3IobGwgaT0wO2k8aW47aSsrKQogICAgewogICAgICAgIGNvdXQoYW5zW2ldKTsKICAgIH0KfQogCmludCBtYWluKCkKeyAgIAogICAgZmFzdGlvOwogICAgLy9sbCB0OwogICAgLy9jaW4+PnQ7CiAgICBsbCB0PTE7CiAgICB3aGlsZSh0LS0pCiAgICB7CiAgICAgICAgQWNEZWdhWWUoKTsKICAgIH0KICAgIGNlcnIgPDwgIlxuVGltZSBlbGFwc2VkOiAiIDw8IDEwMDAgKiBjbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMgPDwgIm1zXG4iOwogICAgcmV0dXJuIDA7Cn0=