#include <fstream>
using namespace std;
ifstream fin( "datorii.in" );
ofstream fout( "datorii.out" );
const int NMAX = 15000;
int aint[NMAX * 4 + 2];
int v[NMAX + 2];
void build(int node, int from, int to){
if( from == to ) {
aint[node] = v[from];
return ;
}
int med = (from + to) >> 1;
build(2 * node, from, med);
build(2 * node + 1, med + 1, to);
aint[node] = aint[2 * node] + aint[2 * node + 1];
}
void update(int node, int from, int to, int x, int val){
if( from == to ) {
aint[node] -= val;
return ;
}
int med = (from + to) >> 1;
if( x <= med )
update(2 * node, from, med, x, val);
else
update(2 * node + 1, med + 1, to, x, val);
aint[node] = aint[2 * node] + aint[2 * node + 1];
}
int query(int node, int from, int to, int x, int y){
if( from == x && y == to )
return aint[node];
int med = (from + to) >> 1;
if( y <= med )
return query(2 * node, from, med, x, y);
else if( x > med )
return query(2 * node + 1, med + 1, to, x, y);
else
return (query(2 * node, from, med, x, med) + query(2 * node + 1, med + 1, to, med + 1, y));
}
int main() {
int n, m, i, a, x, y;
fin >> n >> m;
for( i = 1; i <= n; ++i )
fin >> v[i];
build(1, 1, n);
while( m-- ){
fin >> a >> x >> y;
if( a == 0 )
update(1, 1, n, x, y);
else
fout << query(1, 1, n, x, y) << "\n";
}
return 0;
}