#include <fstream>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
const int NMAX = 15e3;
int tree[4 * NMAX + 1], v[NMAX + 1], n, q;
void build(int node, int st, int dr){
if(st == dr){
tree[node] = v[st];
return;
}
int mid = ((st + dr) >> 1);
build(2 * node, st, mid);
build(2 * node + 1, mid + 1, dr);
tree[node] = tree[2 * node] + tree[2 * node + 1];
}
void update(int node, int st, int dr, int poz){
if(st == dr){
tree[node] = v[poz];
return;
}
int mid = ((st + dr) >> 1);
if(mid < poz)
update(2 * node + 1, mid + 1, dr, poz);
else
update(2 * node, st, mid, poz);
tree[node] = tree[2 * node] + tree[2 * node + 1];
}
int query(int node, int st, int dr, int l, int r){
if(l <= st && dr <= r)
return tree[node];
int mid = ((st + dr) >> 1), s = 0;
if(l <= mid)
s += query(2 * node, st, mid, l, r);
if(mid < r)
s += query(2 * node + 1, mid + 1, dr, l, r);
return s;
}
int main(){
cin >> n >> q;
for(int i = 1; i <= n; i++)
cin >> v[i];
build(1, 1, n);
for(int i = 0; i < q; i++){
int op = 0, x = 0, y = 0;
cin >> op >> x >> y;
if(op == 0){
v[x] -= y;
if(v[x] < 0)
v[x] = 0;
update(1, 1, n, x);
}else{
cout << query(1, 1, n, x, y) << "\n";
}
}
return 0;
}