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