#include <bits/stdc++.h>
using namespace std;
ifstream f ("datorii.in");
ofstream g ("datorii.out");
vector<int> aint(60005, 0);
vector<int> val(15005, 0);
void build( int index, int l, int r){
//cout << l << r << '\n';
if(l == r){
aint[index] = val[l];
//cout << l << " " << r << " " << aint[index] << '\n';
return;
}
int mid = (l + r)/2;
build(2*index+1, l, mid);
build(2*index+2, mid+1, r);
aint[index] = aint[2*index+1] + aint[2*index+2];
//cout << l << " " << r << " " << aint[index] << '\n';
}
int query( int index, int l, int r, int ql, int qr ){
//cout << l << r << '\n';
if( l >= ql && r <= qr ){
return aint[index];
}
if( l > qr || r < ql )
return 0;
int mid = (l+r)/2;
return query( 2*index+1 , l, mid, ql, qr) + query(2*index+2 , mid+1, r, ql, qr);
}
void update ( int index , int l, int r, int update_val, int index_to_update ){
if ( index_to_update < l || index_to_update > r )
return;
aint[index] += update_val;
if( l == r )
return;
int mid = (l+r)/2;
update( 2*index+1 , l, mid, update_val, index_to_update);
update( 2*index+2 , mid+1, r, update_val, index_to_update);
}
int main()
{
int n,m;
f >> n >> m;
for ( int i = 1 ; i <= n ; i++ ){
f>>val[i];
}
build(1, 1, n);
int q_type, a, b;
for ( int i = 0 ; i < m ; i++ ){
f >> q_type >> a >> b;
if ( q_type == 0 ){
update( 1, 1, n, -b, a);
}
else{
g << query(1, 1, n, a, b) << '\n';
}
}
return 0;
}