#include <fstream>
using namespace std;
#define in "datorii.in"
#define out "datorii.out"
#define NMAX 100001
int n, a[NMAX], m;
typedef long long INT;
INT suma, ai[NMAX];
FILE *fin = fopen( in, "r" );
FILE *fout = fopen( out, "w" );
void Update(int nod, int st, int dr, int poz);
void Querry( int nod, int st, int dr, int a, int b);
int main()
{
fscanf( fin, "%ld%ld", &n, &m );
int i;
for ( i = 1; i <= n; ++i )
{
fscanf( fin, "%ld", &a[i] );
Update( 1, 1, n, i);
}
int k;
int s, f;
INT j;
for ( j = 1; j <= m; ++j )
{
fscanf( fin, "%d%d%d", &k, &s, &f );
if ( k == 0 )
{
a[s] -= f;
Update( 1, 1, n, s);
}
else
{
suma = 0;
Querry( 1, 1, n, s, f );
fprintf( fout, "%lld\n", suma );
}
}
fclose( fin );
//fprintf( fout, "Mihai\n" );
fclose( fout );
return 0;
}
void Update( int nod, int st, int dr, int poz )
{
if ( st == dr )
{
ai[nod] = a[poz];
return;
}
if ( st < dr )
{
int mij = (st+dr)>>1;
if ( poz <= mij ) Update( 2*nod, st, mij, poz );
if ( poz > mij ) Update ( 2*nod + 1, mij+1, dr, poz );
}
ai[nod] = ai[2*nod] + ai[2*nod+1];
}
void Querry( int nod, int st, int dr, int a, int b )
{
if ( a <= st && b >= dr )
{
suma += ai[nod];
return;
}
int mij = ( st+dr ) >> 1;
if ( a <= mij ) Querry( 2*nod, st, mij, a, b );
if ( b > mij ) Querry( 2*nod+1, mij+1, dr, a, b );
}