#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
#define nmax 15005
int arb[4*nmax],v[nmax];
int n,m,i,a,b,x;
void build(int nod, int st, int dr)
{
if(st==dr)
{
arb[nod]=v[st];
return;
}
int mij=(st+dr)/2;
build(2*nod,st,mij);
build(2*nod+1,mij+1,dr);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
void update(int nod, int left, int right,int pos, int val)
{
if( left == right)
{
arb[nod] = v[left];
return ;
}
int mid = (left + right) / 2;
if(pos <= mid)
update( 2 * nod, left, mid, pos, val);
else
update(2 * nod + 1, mid + 1, right, pos, val);
arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}
int query(int nod, int left, int right, int qleft, int qright)
{
if(left >= qleft && right <= qright)
{
return arb[nod];
}
int mid = (left + right) / 2;
int s = 0;
if(qleft <= mid && qright > mid)
return query(2 * nod, left, mid, qleft, qright) + query(2 * nod + 1, mid + 1, right, qleft, qright);
if(qleft <= mid)
return query(2 * nod, left, mid, qleft, qright);
else
return query(2 * nod + 1, mid + 1, right, qleft, qright);
}
int main()
{
int t;
fin>>n>>m;
for(i=1; i<=n; i++)
{
fin>>v[i];
}
int tip;
build(1,1,n);
for(i=1; i<=m; i++)
{
fin>>tip;
if(tip==0)
{
fin>>t>>x;
v[t]-=x;
update(1,1,n,t,x);
}
else
{
fin>>a>>b;
fout<< query(1,1,n,a,b)<<'\n';
}
}
return 0;
}