#include <bits/stdc++.h>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
int arbore[100000+5], n, m, x, q, l, r;
void update(int val, int pos, int nod, int st, int dr){
if (st == dr){
arbore[nod] += val;
return;
}
int mij = (st + dr) / 2;
if (pos <= mij){
update(val, pos, nod*2, st, mij);
}
else{
update(val, pos, nod*2+1, mij+1, dr);
}
arbore[nod] = arbore[nod*2] + arbore[nod*2+1];
}
int query(int l, int r, int nod, int st, int dr){
if (l <= st && dr <= r){
return arbore[nod];
}
int mij = (st + dr) / 2;
int x = 0, y = 0;
if (l <= mij){
x = query(l, r, nod*2, st, mij);
}
if (r >= mij+1){
y=query(l, r, nod*2+1, mij+1, dr);
}
return x + y;
}
int main(){
fin >> n >> m;
for (int i=1;i<=n;i++){
fin>>x;
update(x, i, 1, 1, n);
}
for(int i = 1; i <= m; i++){
fin>>q>>l>>r;
if(q == 0){
update(-r, l, 1, 1, n);
}
else{
fout << query(l,r,1,1,n) << '\n';
}
}
return 0;
}