#include <stdio.h>
#include <fstream>
using namespace std;
#define in "datorii.in"
#define out "datorii.out"
#define Dim 15001
long long dat[Dim], n, m, x, y, ok;
long long arb[2*Dim+2];
long long sum,t,v;
void Q(int nod, int st, int dr, int a, int b);
void Update1(int nod, int st, int dt, int a);
void Update2(int nod, int st, int dt, int a);
int main()
{
int k;
int tip,t,v;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%lld%lld", &n, &k);
for ( int i = 1; i <= n; i++ )
{
scanf("%lld",&dat[i]);
Update1(1,1,n,i);
}
for ( int i = 1; i <= k; i++ )
{
scanf("%d%lld%lld",&tip,&t,&v);
if ( tip == 0 )
{
dat[t] -= v;
Update2(1,1,n,t);
}
else
{
Q(1,1,n,t,v);
printf("%lld\n",sum);
sum = 0;
}
}
}
void Update2(int nod, int st, int dr, int a)
{
if ( st == dr )
{
arb[nod] = dat[a];
return;
}
int mij = (st+dr)/2;
if ( a <= mij ) Update2(2*nod,st,mij,a);
if ( mij < a ) Update2(2*nod+1,mij+1,dr,a);
arb[nod] = arb[2*nod+1] + arb[2*nod];
}
void Update1(int nod, int st, int dr, int a)
{
arb[nod] += dat[a];
if ( st == dr )
{
arb[nod] = dat[a];
return;
}
if ( st < dr )
{
int mij = (st+dr)/2;
if ( a <= mij && 2*nod <= Dim ) Update1(2*nod,st,mij,a);
if ( a > mij && 2*nod <= Dim ) Update1(2*nod+1,mij+1,dr,a);
}
}
void Q(int nod,int st, int dr, int a, int b)
{
if ( a <= st && dr <= b )
{
sum += arb[nod];
return;
}
int mij = (st+dr)/2;
if ( a <= mij ) Q(2*nod,st,mij,a,b);
if ( mij < b ) Q(2*nod+1,mij+1,dr,a,b);
}