#include <iostream>
#include <fstream>
#define nl '\n'
using namespace std;
ifstream f ( "datorii.in" );
ofstream g ( "datorii.out" );
const int NMAX = 15002;
int aint[4 * NMAX];
int v[NMAX], N, M;
void build ( int x, int lx, int rx )
{
if ( rx == lx )
{
if ( rx <= N )
aint[x] = v[rx];
return;
}
int m = ( lx + rx ) / 2;
build ( 2 * x, lx, m );
build ( 2 * x + 1, m + 1, rx );
aint[x] = aint[2 * x] + aint[2 * x + 1];
}
void Update ( int x, int lx, int rx, int poz, int val )
{
if ( lx == rx )
{
aint[x] -= val;
return;
}
int m = ( lx + rx ) / 2;
if ( poz <= m )
Update ( 2 * x, lx, m, poz, val );
else Update ( 2 * x + 1, m + 1, rx, poz, val );
aint[x] = aint[2 * x + 1] + aint[2 * x];
}
int Sum ( int x, int lx, int rx, int l, int r )
{
if ( lx >= l && rx <= r )
return aint[x];
if ( rx < l || lx > r )
return 0;
int m = ( lx + rx ) / 2;
int s1 = Sum ( 2 * x, lx, m, l, r );
int s2 = Sum ( 2 * x + 1, m + 1, rx, l, r );
return s1 + s2;
}
int main()
{
f >> N >> M;
for ( int i = 1; i <= N; i++ )
f >> v[i];
build ( 1, 1, N );
while ( M-- )
{
int tip;
f >> tip;
if ( tip == 0 )
{
int T, V;
f >> T >> V;
Update ( 1, 1, N, T, V );
}
else
{
int P, Q;
f >> P >> Q;
g << Sum ( 1, 1, N, P, Q ) << nl;
}
}
return 0;
}