#include <fstream>
using namespace std;
int arb[ 15005 * 4 ] , i , n, m, x, ans, a, b;
ifstream f ("datorii.in");
ofstream g ("datorii.out");
void update ( int nod , int st, int dr, int poz, int val )
{
int mij = ( st + dr ) / 2;
if ( st == dr )
{
arb [ nod ] -= val;
return;
}
if ( poz <= mij )
{
update ( 2*nod , st , mij , poz, val );
}
else
{
update ( 2*nod+1 , mij + 1 , dr , poz , val );
}
arb[nod] = arb [ 2 * nod ] + arb [ 2 * nod + 1 ];
}
void ins ( int nod , int st, int dr, int poz, int val )
{
int mij = ( st + dr ) / 2;
if ( st == dr )
{
arb [ nod ] = val;
return;
}
if ( poz <= mij )
{
ins ( 2*nod , st , mij , poz, val );
}
else
{
ins ( 2*nod+1 , mij + 1 , dr , poz , val );
}
arb[nod] = arb [ 2 * nod ] + arb [ 2 * nod + 1 ];
}
void query ( int nod , int st, int dr , int L , int R )
{
int mij = ( st + dr ) / 2;
if ( st >= L && dr <= R )
{
ans = ans + arb [ nod ];
return;
}
if ( st > R || dr < L )
{
return;
}
query ( 2*nod , st , mij , L , R );
query ( 2*nod+1 , mij + 1 , dr , L , R );
}
int main ()
{
f>>n>>m;
for ( i=1; i<=n ; i++)
{
f>>x;
ins ( 1 , 1 , n , i , x );
}
for ( i = 1 ; i <= m ; i++ )
{
f>>x>>a>>b;
if ( x == 0 )
{
update ( 1 , 1 , n , a , b );
}
else
{
ans=0;
query ( 1 , 1 , n , a , b );
g<<ans<<'\n';
}
}
return 0;
}