#include <cstdio>
#define NX (1<<15)
using namespace std;
typedef long long ll;
ll S[ NX ];
int a[ NX ], N, M, X, Y, val;
void build( int n, int l, int r ) {
if( l==r ) {
S[n] = a[l];
return;
}
int m = (l+r)>>1;
build( n<<1, l, m );
build( (n<<1)+1, m+1, r );
S[n] = S[n<<1] + S[(n<<1)+1];
}
void upd( int n, int l, int r ) {
S[n] -= val;
if( l==r )
return;
int m = (l+r)>>1;
if( X <= m )
upd( n<<1, l, m );
else
upd( (n<<1)+1, m+1, r );
}
ll que( int n, int l, int r ) {
if( X<=l && r<=Y )
return S[n];
int m = (l+r)>>1;
ll s = 0;
if( X <= m )
s += que( n<<1, l, m );
if( m < Y )
s += que( (n<<1)+1, m+1, r );
return s;
}
void cit() {
int i, j, op;
scanf( "%d%d", &N, &M );
for( i = 1; i <= N; i++ )
scanf( "%d", a+i );
build( 1, 1, N );
while( M-- ) {
scanf( "%d %d %d ", &op, &i, &j );
if( op == 0 ) {
val = j, X = i;
upd( 1, 1, N );
}
else {
X = i, Y = j;
printf( "%lld\n", que( 1, 1, N ) );
}
}
}
int main() {
freopen( "datorii.in", "r", stdin );
freopen( "datorii.out", "w", stdout );
cit();
return 0;
}