#include <fstream>
using namespace std;
#define Nmax 15005
int Arb[ 4 * Nmax ];
int V[ Nmax ];
int N, M;
void Build( int nod, int left, int right ){
if ( left == right ){
Arb[nod] = V[left];
return ;
}
int middle = ( left + right ) / 2;
Build( 2 * nod, left, middle );
Build( 2 * nod + 1, middle + 1, right );
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] -= val;
return ;
}
int middle = ( left + right ) / 2;
if ( pos <= middle )
Update ( 2 * nod, left, middle, pos, val );
else
Update ( 2 * nod + 1, middle + 1, right, pos, val );
Arb[nod] = Arb[ 2 * nod ] + Arb[ 2 * nod + 1 ];
}
int Query( int nod, int left, int right, int a, int b ){
if ( a <= left && right <= b )
return Arb[nod];
int middle = ( left + right ) / 2;
int S = 0;
if ( a <= middle )
S = Query ( 2 * nod, left, middle, a, b );
if ( b > middle )
S += Query ( 2 * nod + 1, middle + 1, right, a, b );
return S;
}
int main(){
ifstream f( "datorii.in" );
ofstream g( "datorii.out" );
f >> N >> M;
for ( int i = 1; i <= N; ++i )
f >> V[i];
Build( 1, 1, N );
for ( int x, a, b; M; M-- ){
f >> x >> a >> b;
if ( !x )
Update ( 1, 1, N, a, b );
else
g << Query ( 1, 1, N, a, b ) << '\n';
}
f.close();
g.close();
return 0;
}