#include <cstdio>
#define maxn 15001
FILE *in = fopen("datorii.in","r"), *out = fopen("datorii.out","w");
int n, m;
//int b[maxn]; // AIB
//
//int query(int x)
//{
// int r = 0;
//
// while ( x )
// r += b[x], x -= x^(x-1)&x;
//
// return r;
//}
//
//void update(int x, int val)
//{
// while ( x <= n )
// b[x] += val, x += x^(x-1)&x;
//}
//
//void goAIB()
//{
// int a, c, d;
// for ( int i = 1; i <= n; ++i )
// fscanf(in, "%d", &a), update(i, a);
//
// for ( int i = 1; i <= m; ++i )
// {
// fscanf(in, "%d %d %d", &a, &c, &d);
// if ( a )
// fprintf(out, "%d\n", query(d) - query(c-1));
// else
// update(c, -d);
// }
//
//}
int a[maxn];
int arb[2<<13];
void updatex(int nod, int st, int dr)
{
if ( st == dr )
{
arb[nod] = a[st];
return;
}
int m = (st + dr) >> 1;
int q = nod << 1;
updatex(q, st, m);
updatex(q+1, m+1, dr);
arb[nod] = arb[q] + arb[q+1];
}
int r = 0, p1, p2;
void queryx(int nod, int st, int dr)
{
if ( p1 <= st && dr <= p2 )
{
r += arb[nod];
return;
}
if ( st == dr )
return;
int m = (st + dr) >> 1;
int q = nod << 1;
if ( p1 <= m )
queryx(q, st, m);
if ( p2 > m )
queryx(q+1, m+1, dr);
}
void goAdeIntervale()
{
for ( int i = 1; i <= n; ++i )
fscanf(in, "%d", &a[i]);
updatex(1, 1, n);
int op, t, d;
for ( int i = 1; i <= m; ++i )
{
fscanf(in, "%d %d %d", &op, &t, &d);
if ( op == 0 )
a[t] -= d, updatex(1, 1, n);
else
r = 0, p1 = t, p2 = d, queryx(1, 1, n), fprintf(out, "%d\n", r);
}
}
int main()
{
fscanf(in, "%d %d", &n, &m);
goAdeIntervale();
//goAIB();
return 0;
}