#include <bits/stdc++.h>
using namespace std;
ifstream fin ("datorii.in") ;
ofstream fout ("datorii.out") ;
int sol ;
int a[400001] , v[100001] ;
void build ( int poz , int st , int dr )
{
if ( st == dr )
a[poz] = v[st] ;
else
{
int mid = ( st + dr ) / 2 ;
build ( poz * 2 , st , mid ) ;
build ( poz * 2 + 1 , mid + 1 , dr ) ;
a[poz] = a[poz*2] + a[poz*2+1] ;
}
}
void query ( int poz , int st , int dr , int qa , int qb )
{
if ( st >= qa && dr <= qb )
sol += a[poz] ;
else
{
int mid = ( st + dr ) / 2 ;
if ( qa <= mid )
query ( poz * 2 , st , mid , qa , qb ) ;
if ( qb > mid )
query ( 2 * poz + 1 , mid + 1 , dr , qa , qb ) ;
}
}
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 ( nod * 2 , st , mid , poz , val ) ;
if ( poz > mid )
update ( 2 * nod + 1 , mid + 1 , dr , poz , val ) ;
a[nod] = a[nod*2] + a[nod*2+1] ;
}
}
int main()
{
int n , q ;
fin >> n >> q ;
for ( int i = 1 ; i <= n ; i ++ )
fin >> v[i] ;
build ( 1 , 1 , n ) ;
for ( int i = 1 ; i <= q ; i ++ )
{
int x , y , c ;
fin >> c >> x >> y ;
if ( c == 1 )
{
sol = 0 ;
query ( 1 , 1 , n , x , y ) ;
fout << sol << '\n' ;
}
else
update ( 1 , 1 , n , x , y ) ;
}
return 0;
}