#include<bits/stdc++.h>
using namespace std;
const int maxn=100005;
int arr[maxn];
int tree[4*maxn];
void build(int node,int left,int right){
if(left==right){
tree[node] = arr[left];
}
else {
int mid = (left+right)/2;
build(2*node,left,mid);
build(2*node+1,mid+1,right);
tree[node] = tree[2*node] + tree[2*node+1];
}
}
void update(int node,int left,int right,int idx,int val){
if(left==right){
arr[idx]+=val;
tree[node] = val;
}
else {
int mid = (left+right)/2;
if(idx>=left && idx<=mid)
update(2*node,left,mid,idx,val);
else
update(2*node+1,mid+1,right,idx,val);
tree[node] = tree[2*node] + tree[2*node+1];
}
}
int query(int node,int left,int right,int x,int y){
if(left > y || right < x)
return 0;
if(left >= x && right<= y)
return tree[node];
int mid = (left+right)/2;
return (query(2*node,left,mid,x,y) + query(2*node+1,mid+1,right,x,y));
}
int main(){
char t;
int n,q,a,b;
cin>>n>>q;
for(int i=0;i<n;i++)
cin>>arr[i];
build(1,0,n-1);
while(q--){
cin>>t>>a>>b;
if(t=='q')
cout << query(1,0,n-1,a-1,b-1) << endl;
else
update(1,0,n-1,a-1,b);
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBtYXhuPTEwMDAwNTsKCmludCBhcnJbbWF4bl07CmludCB0cmVlWzQqbWF4bl07Cgp2b2lkIGJ1aWxkKGludCBub2RlLGludCBsZWZ0LGludCByaWdodCl7CglpZihsZWZ0PT1yaWdodCl7CgkJdHJlZVtub2RlXSA9IGFycltsZWZ0XTsKCX0KCWVsc2UgewoJICAgaW50IG1pZCA9IChsZWZ0K3JpZ2h0KS8yOwoJICAgYnVpbGQoMipub2RlLGxlZnQsbWlkKTsKCSAgIGJ1aWxkKDIqbm9kZSsxLG1pZCsxLHJpZ2h0KTsKCSAgIHRyZWVbbm9kZV0gPSB0cmVlWzIqbm9kZV0gKyB0cmVlWzIqbm9kZSsxXTsKCX0KfQoKdm9pZCB1cGRhdGUoaW50IG5vZGUsaW50IGxlZnQsaW50IHJpZ2h0LGludCBpZHgsaW50IHZhbCl7CglpZihsZWZ0PT1yaWdodCl7CiAgICAgICAgYXJyW2lkeF0rPXZhbDsKCQl0cmVlW25vZGVdID0gdmFsOwoJfQoJZWxzZSB7CgkgICBpbnQgbWlkID0gKGxlZnQrcmlnaHQpLzI7CgkgICBpZihpZHg+PWxlZnQgJiYgaWR4PD1taWQpCgkgICAgICB1cGRhdGUoMipub2RlLGxlZnQsbWlkLGlkeCx2YWwpOwoJICAgZWxzZQoJICAgICAgdXBkYXRlKDIqbm9kZSsxLG1pZCsxLHJpZ2h0LGlkeCx2YWwpOwoJdHJlZVtub2RlXSA9IHRyZWVbMipub2RlXSArIHRyZWVbMipub2RlKzFdOwoJfQp9CgppbnQgcXVlcnkoaW50IG5vZGUsaW50IGxlZnQsaW50IHJpZ2h0LGludCB4LGludCB5KXsKCWlmKGxlZnQgPiB5IHx8IHJpZ2h0IDwgeCkKCQlyZXR1cm4gMDsKCWlmKGxlZnQgPj0geCAmJiByaWdodDw9IHkpCgkJcmV0dXJuIHRyZWVbbm9kZV07CglpbnQgbWlkID0gKGxlZnQrcmlnaHQpLzI7CglyZXR1cm4gKHF1ZXJ5KDIqbm9kZSxsZWZ0LG1pZCx4LHkpICsgcXVlcnkoMipub2RlKzEsbWlkKzEscmlnaHQseCx5KSk7Cn0KCmludCBtYWluKCl7CiAgIGNoYXIgdDsKICAgaW50IG4scSxhLGI7CiAgIGNpbj4+bj4+cTsKICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgCSBjaW4+PmFycltpXTsKICAgYnVpbGQoMSwwLG4tMSk7CiAgIHdoaWxlKHEtLSl7CiAgIAkgY2luPj50Pj5hPj5iOwogICAJIGlmKHQ9PSdxJykKICAgCSAgICBjb3V0IDw8IHF1ZXJ5KDEsMCxuLTEsYS0xLGItMSkgPDwgZW5kbDsKICAgICBlbHNlCiAgICAgICAgdXBkYXRlKDEsMCxuLTEsYS0xLGIpOwogICB9CnJldHVybiAwOwp9