#include <fstream>
using namespace std;
const int NMAX= 100000;
ifstream in( "datorii.in" );
ofstream out( "datorii.out" );
int st[ 4 * NMAX + 2 ], Ans;
void init( int nod, int l, int r, int poz, int val )
{
if( l==r ) st[ nod ]= val;
else
{
int mid= ( l + r ) / 2;
if( poz <= mid )
{
init( 2*nod, l, mid, poz, val );
}
else
{
init( 2*nod+1, mid+1, r, poz, val );
}
st[nod]= st[ 2*nod ] + st[ 2*nod + 1 ];
}
}
void Update( int nod, int l, int r, int poz, int val )
{
if( l == r )
{
st[ nod ]-= val;
}
else
{
int mid= ( l + r )/2;
if( poz <= mid )
{
Update( 2*nod, l, mid, poz, val );
}
else
{
Update( 2*nod+1, mid+1, r, poz, val );
}
st[nod]= st[ 2*nod ] + st[ 2*nod + 1 ];
}
}
int query( int nod, int l, int r, int x, int y )
{
int mid= ( l + r ) / 2;
if( l >= x && y >= r )
{
Ans+= st[nod];
return 0;
}
mid= ( l + r ) / 2;
if( x<=mid )
{
query( 2*nod, l, mid, x, y );
}
if( y>mid )
{
query( 2*nod+1, mid+1, r, x, y );
}
}
int main( )
{
int N, M;
in >> N >> M;
int x, y, a;
for( int i= 1; i<=N; ++i )
{
in >> x;
init( 1, 1, N, i, x );
}
for( ; M>=1 ; --M )
{
in >> a >> x >> y;
if( a == 1 )
{
Ans= 0;
query( 1, 1, N, x, y );
out << Ans << '\n';
}
else
{
Update( 1, 1, N, x, y );
}
}
return 0;
}