#include <fstream>
using namespace std;
//#define ull unsigned long long int
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int l[15001];
struct aint{
aint *a, *b, *p;
int l, r, v = 0;
};
aint *leaf[15001], *mempool = new aint[30010];
int build(aint *node){
if(node->l == node->r){
leaf[node->l] = node;
return node->v = l[node->l];
}else{
node->a = mempool++;
node->a->l = node->l;
node->a->r = node->l + (node->r - node->l)/2;
node->a->p = node;
node->b = mempool++;
node->b->l = node->a->r + 1;
node->b->r = node->r;
node->b->p = node;
return node->v = build(node->a) + build(node->b);
}
}
void add(aint *node, int val){
while(node->p != NULL){
node->v += val;
node = node->p;
}
node->v += val;
}
int query(aint *node, int l, int r){
if((l == node->l) && (r == node->r))
return node->v;
else if(r <= node->a->r)
return query(node->a, l, r);
else if(l >= node->b->l)
return query(node->b, l, r);
else return query(node->a, l, node->a->r) + query(node->b, node->b->l, r);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
/*cout<<15000<<'\n';
for(int x = 0;x<15000;x++)
cout<<1000<<'\n';
cout<<100000<<'\n';
for(int x = 0;x<100000;x++)
cout<<"1 1 15000\n";
return 0;*/
int n, m;
cin>>n>>m;
for(int x = 1;x<=n;x++)
cin>>l[x];
aint *root = mempool++;
root->l = 1;
root->r = n;
root->p = NULL;
/*cout<<*/build(root);//<<"<-TOTAL SUM\n";
for(int x = 0;x<m;x++){
int a, b, c;
cin>>a>>b>>c;
if(a){
cout<<query(root, b, c)<<'\n';
}else{
add(leaf[b], -c);
}
}
return 0;
}