#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,q,a[15000],tree[4*15000],task;
void constr(int node, int left, int right)
{
if(left==right)
tree[node]=a[left];
else
{
int mid=(left+right)/2;
constr(2*node,left,mid);
constr(2*node+1,mid+1,right);
tree[node]=tree[2*node]+tree[2*node+1];
}
}
void update(int node,int left, int right,int newval,int newpoz)
{
if(left==right)
tree[node]-=newval;
else
{
int mid=(left+right)/2;
if(newpoz<=mid)
update(node*2,left,mid,newval,newpoz);
else
update(node*2+1,mid+1,right,newval,newpoz);
tree[node]=tree[node*2]+tree[node*2+1];
}
}
int querry(int node, int left, int right, int qleft,int qright)
{
if(qleft<=left && right <=qright)
return tree[node];
else
{
int mid=(left+right)/2;
if(mid+1<=qleft)
return querry(node*2+1,mid+1,right,qleft,qright);
if(qright<=mid)
return querry(node*2,left,mid,qleft,qright);
return ( querry(node*2,left,mid,qleft,qright)+querry(node*2+1,mid+1,right,qleft,qright));
}
}
int main()
{
fin >> n >>q;
for(int i=1;i<=n;i++)
fin >> a[i];
constr(1,1,n);
while(q--)
{
fin >> task;
if(task==0)
{
int t,v;
fin >> t>>v;
update(1,1,n,v,t);
a[t]-=v;
}
else if(task==1)
{
int p,q;
long long s=0;
fin >> p>>q;
fout << querry(1,1,n,p,q) << '\n';
}
}
}