rt,#1#2#3#11 AC,其它WA
#include <bits/stdc++.h>
using namespace std;
inline long long read()
{
long long x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
struct node{
long long sum;
long long cnt;
long long p[805];
}k[805];
long long n,m;
long long B;
long long x[500005];
int main(){
n=read();
m=read();
for(long long i=1;i<=n;i++) x[i]=read();
B=709;//sqrt(5000000) 上取整 +1
for(long long i=0;i<=B;i++){
if(n>=(i+1)*B){
for(long long j=0;j<B;j++){
if(i==0&&j==0) continue;
k[i].p[j]=x[i*B+j];
k[i].sum+=k[i].p[j];
k[i].cnt++;
}
}
else if(n-(i*B)>=0){
for(long long j=0;j<=n-(i*B);j++){
k[i].p[j]=x[i*B+j];
k[i].sum+=k[i].p[j];
k[i].cnt++;
}
}
else{
for(long long j=0;j<B;j++){
k[i].p[j]=LONG_LONG_MAX;
}
k[i].sum=0;
k[i].cnt=0;
}
}
for(long long i=1;i<=m;i++){
char op;
cin>>op;
if(op=='C'){
long long a=read(),b=read();
k[a/B].sum-=b;
k[a/B].p[a-a/B*B]-=b;
}
if(op=='I'){
long long a=read(),b=read();
if(k[a/B].p[a-a/B*B]==LONG_LONG_MAX){
k[a/B].p[a-a/B*B]=b;
k[a/B].sum+=b;
k[a/B].cnt++;
}
else{
k[a/B].sum+=(b-k[a/B].p[a-a/B*B]);
k[a/B].p[a-a/B*B]=b;
}
}
if(op=='D'){
long long a=read();
for(long long i=0;i<=B;i++){
if(a>k[i].cnt) a-=k[i].cnt;
else{
long long mq=0;
for(long long j=0;j<B;j++){
if(i==0&&j==0) continue;
if(k[i].p[j]!=LONG_LONG_MAX){
mq++;
if(mq==a){
k[i].cnt--;
k[i].sum-=k[i].p[j];
k[i].p[j]=LONG_LONG_MAX;
break;
}
}
}
break;
}
}
}
if(op=='Q'){
long long ans=0;
for(long long i=0;i<=B;i++) ans+=k[i].sum;
cout<<ans<<endl;
}
}
return 0;
}