# include <iostream>
# include <fstream>
# include <cstdio>
# include <algorithm>
using namespace std ;
int const maxn = 15000 ;
static int suma [ 3 * maxn ] ;
static int poz , val ;
void
actualizare ( int nod , int st , int dr ) {
if ( poz <= st && dr <= poz ) {
suma [ nod ] += val ;
} else {
int mij = ( st + dr ) >> 1 ;
int nod1 = nod << 1 ;
int nod2 = 1 + nod1 ;
if ( poz <= mij ) actualizare ( nod1 , st , mij ) ;
if ( poz > mij ) actualizare ( nod2 , mij + 1 , dr ) ;
suma [ nod ] = suma [ nod1 ] + suma [ nod2 ] ;
}
}
int
interogare ( int nod , int st , int dr , int a , int b ) {
if ( a <= st && dr <= b ) {
return suma [ nod ] ;
} else {
int mij = ( st + dr ) >> 1 ;
int nod1 = nod1 << 1 ;
int nod2 = nod1 + 1 ;
int x = 0 , y = 0 ;
if ( a <= mij ) x = interogare ( nod1 , st , mij , a , b ) ;
if ( b > mij ) y = interogare ( nod2 , mij + 1 , dr , a , b ) ;
return x + y ;
}
}
int
main ( ) {
FILE * pFin = fopen ( "datorii.in" , "r" ) ;
FILE * pFout = fopen ( "datorii.out" , "w" ) ;
setvbuf ( pFin , NULL , _IOFBF , 1024 * 1024 ) ;
setvbuf ( pFout , NULL , _IOFBF , 1024 * 1024 ) ;
int n , m ;
fscanf ( pFin , "%d %d" , & n , & m ) ;
fill ( & suma [ 0 ] , & suma [ sizeof ( suma ) / sizeof ( suma [ 0 ] ) ] , 0 ) ;
int i ;
for ( i = 1 ; i <= n ; i ++ ) {
fscanf ( pFin , "%d", & val ) ; poz = i ;
actualizare ( 1 , 1 , n ) ;
}
for ( i = 1 ; i <= m ; i ++ ) {
int p , q , r;
fscanf ( pFin , "%d %d %d" , & r , & p , & q ) ;
if ( 0 == r ) {
poz = p ; val = - q ;
actualizare ( 1 , 1 , n ) ;
} else {
int v = interogare ( 1 , 1 , n , p , q ) ;
fprintf ( pFout , "%d\n" , v ) ;
}
}
fclose ( pFin ) ;
fclose ( pFout ) ;
return 0 ;
}