/*
* File: main.cpp
* Author: virtualdemon
*
* Created on January 30, 2010, 12:20 PM
*/
#include <fstream>
#define Nmax 4*15000+1
/*
*
*/
using namespace std;
int sum;
int v[Nmax];
inline void Update1( int vertex, int left, int right, int p, int x )
{
if( left == right )
{
v[vertex]+=x;
return;
}
int middle( left+(right-left)/2 );
if( p <= middle )
Update1( 2*vertex, left, middle, p, x );
else Update1( 2*vertex+1, middle+1, right, p, x );
v[vertex]=v[2*vertex]+v[2*vertex+1];
}
inline void Update2( int vertex, int left, int right, int p, int x )
{
if( left == right )
{
v[vertex]-=x;
return;
}
int middle( left+(right-left)/2 );
if( p <= middle )
Update2( 2*vertex, left, middle, p, x );
else Update2( 2*vertex+1, middle+1, right, p, x );
v[vertex]=v[2*vertex]+v[2*vertex+1];
}
inline int Query( int vertex, int left, int right, int a, int b )
{
if( a <= left && right <= b )
{
return v[vertex];
}
int sum=0, middle=left+(right-left)/2;
if( a <= middle )
sum+=Query( 2*vertex, left, middle, a, b );
if( b > middle )
sum+=Query( 2*vertex+1, middle+1, right, a, b );
return sum;
}
int main()
{
int n, m, i, x, y, z;
ifstream in("datorii.in");
in>>n>>m;
for( i=1; i <= n; ++i )
{
in>>x;
Update1( 1, 1, n, i, x );
}
ofstream out("datorii.out");
for( i=1; i <= m; ++i )
{
in>>x>>y>>z;
if( 0 == x )
Update2( 1, 1, n, y, z );
else out<<Query( 1, 1, n, y, z )<<'\n';
}
return 0;
}