#include <iostream>
#include <fstream>
using namespace std;
int a[15010];
int tree[150000];
void build(int node,int start,int end){
if(start == end){
tree[node] = a[start];
}else{
int mid = (start+end)/2;
build(2*node,start,mid);
build(2*node+1,mid+1,end);
tree[node] = tree[2*node] + tree[2*node+1];
}
}
void update(int node,int start,int end,int indx,int val){
if(start == end){
a[indx] += val;
tree[node] += val;
}else{
int mid = (start+end)/2;
if(start<=indx && indx<=mid){
update(2*node,start,mid,indx,val);
}else{
update(2*node+1,mid+1,end,indx,val);
}
tree[node] = tree[2*node] + tree[2*node+1];
}
}
int query(int node,int start,int end,int l,int r){
if(r<start ||end<l){
return 0;
}else{
//std::cout<<start<<" "<<end<<endl;
if(l<=start && end<=r){
return tree[node];
}
int mid = (start+end)/2;
int p1 = query(2*node,start,mid,l,r);
int p2 = query(2*node+1,mid+1,end,l,r);
return p1+p2;
}
}
int main() {
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m;
fin>>n>>m;
for(int i=1;i<=n;i++){
fin>>a[i];
//cout<<a[i];
}
build(1,1,n);
//std::cout<<"built"<<endl;
while(m--){
int x;
fin>>x;
if(x == 1){
int l,r;
fin>>l>>r;
fout<<query(1,1,n,l,r)<<endl;
}else{
int t,v;
fin>>t>>v;
//cout<<a[t]-v<<endl;
update(1,1,n,t,-v);
}
}
}