#include<bits/stdc++.h>
using namespace std;
const int MAXNODE=4000000+100;
const int MAXN=2e6+10;
struct NODE{
//int value; //value表示单点值
int grade; //grade表示掌控区间的最大值
int left,right;
}node[MAXNODE];
int father[MAXN];
void BuildTree(int i,int left,int right){
node[i].left=left;
node[i].right=right;
node[i].grade=0;
if(left==right){
father[left]=i;
return;
}
BuildTree(i<<1,left,(int)(floor(left+right)/2.0));
BuildTree((i<<1)+1,(int)(floor(left+right)/2.0)+1,right);
}
void UpdateTree(int ri,int b){
if(ri==1){
node[ri].grade+=b;
return ;
}
node[ri].grade+=b;
UpdateTree(ri/2,b);
}
int Sum;
void Query(int i,int l,int r){
if(node[i].left==l&&node[i].right==r){
Sum+=node[i].grade;
return ;
}
i=i<<1;
if(l<=node[i].right){
if(r<=node[i].right) Query(i,l,r);
else Query(i,l,node[i].right);
}
i++;
if(r>=node[i].left){
if(l>=node[i].left) Query(i,l,r);
else Query(i,node[i].left,r);
}
}
int main(){
int n,m,g;
ios::sync_with_stdio(false);
while(cin>>n>>m){
BuildTree(1,1,n);
for(int i=1;i<=n;i++){
cin>>g;
//node[father[i]].value=g;
UpdateTree(father[i],g);
}
char op[10];
int a,b;
while(m--){
cin>>op>>a>>b;
if(op[0] == 'Q'){
Sum=0;
Query(1,a,b);
cout<<Sum<<endl;
}
else{
//node[father[a]].value+=b;
UpdateTree(father[a],b);
}
}
}
return 0;
}