#include <bits/stdc++.h>
std::ifstream f("datorii.in");
std::ofstream g("datorii.out");
const int SIZE=1500;
int a[SIZE*4+4];
int v[SIZE+1];
int n, m;
int combine(int a,int b){
return a+b;
}
void build(int node, int left, int right){
if(left==right){
a[node]=v[left];
return;
}
int mid=(left+right)/2;
build(node*2,left,mid);
build(node*2+1,mid+1,right);
a[node]=combine(a[node*2],a[node*2+1]);
}
void update(int node, int left, int right, int poz, int val){
if(left==right){
a[node]-=val;
return;
}
int mid=(left+right)/2;
if(poz<=mid)
update(node*2,left,mid,poz,val);
else
update(node*2+1,mid+1,right,poz,val);
a[node]=combine(a[node*2],a[node*2+1]);
}
int query(int node, int left, int right, int ql, int qr){
if(ql<=left && right<=qr)
return a[node];
int mid=(left+right)/2, result=0;
if(ql<=mid)
result+=query(node*2, left, mid, ql, qr);
if(qr>mid)
result+=query(node*2+1,mid+1,right,ql,qr);
return result;
}
int main(){
f>>n>>m;
for(int i=1;i<=n;i++)
f>>v[i];
build(1,1,n);
while(m--){
int t, s, e;
f>>t>>s>>e;
if(t==1)
g<<query(1,1,n,s,e)<<'\n';
else
update(1,1,n,s,e);
}
return 0;
}