#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int N=2e5+5;
int n,m,a[N],f[N];
struct Segment_tree{
struct Node{
int s,tag;
}tree[N<<2];
int ls(int u){return u<<1;}
int rs(int u){return u<<1|1;}
void push_up(int u){tree[u].s=tree[ls(u)].s+tree[rs(u)].s;}
void push_down(int u,int l,int r){
if(tree[u].tag){
tree[ls(u)].tag+=tree[u].tag;
tree[rs(u)].tag+=tree[u].tag;
tree[ls(u)].s+=l*tree[u].tag;
tree[rs(u)].s+=r*tree[u].tag;
tree[u].tag=0;
}
}
void update(int u,int l,int r,int L,int R,int x){
if(l>=L&&R>=r){
tree[u].tag+=x;
tree[u].s+=(r-l+1)*x;
return;
}
int mid=l+r>>1;
push_down(u,mid-l+1,r-mid);
if(mid>=L)update(ls(u),l,mid,L,R,x);
if(R<mid)update(rs(u),mid+1,r,L,R,x);
push_up(u);
}
int query(int u,int l,int r,int L,int R){
if(l>=L&&R>=r)return tree[u].s;
int res=0;int mid=l+r>>1;
push_down(u,mid-l+1,r-mid);
if(mid>=L)res+=query(ls(u),l,mid,L,R);
if(R<mid)res+=query(rs(u),mid+1,r,L,R);
return res;
}
}t;
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
f[i]=f[i-1]+a[i];
for(int i=2;i<=n;i++)
f[i]+=f[i-1];
while(m--){
char opt[10];
scanf("%s",opt);
if(opt[0]=='Q'){
int k;
scanf("%d",&k);
printf("%lld\n",f[k]+t.query(1,1,n,1,k));
}
else{
int k,x;
scanf("%d%d",&k,&x);
t.update(1,1,n,k,n,x-a[k]);
a[k]=x;
}
}
return 0;
}