#include <bits/stdc++.h>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
const int kN = 15e3 + 5;
int arb[4 * kN], a[4 * kN];
int n, m;
void build (int nod, int st, int dr){
if (st == dr){
arb[nod] = a[st];
}
else{
int mij = (st + dr) / 2;
build(2 * nod, st, mij);
build(2 * nod + 1, mij + 1, dr);
arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}
}
void update (int nod, int st, int dr, int poz, int val){
if (st == dr){
arb[nod] += val;
}
else{
int mij = (st + dr) / 2;
if (poz <= mij){
update(nod * 2, st, mij, poz, val);
}
else{
update(nod * 2 + 1, mij + 1, dr, poz, val);
}
arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}
}
int query (int nod, int st, int dr, int Qst, int Qdr){
if (Qst <= st && dr <= Qdr){
return arb[nod];
}
else{
int mij = (st + dr) / 2;
int p = 0, q = 0;
if (Qst <= mij){
p = query(2 * nod, st, mij, Qst, Qdr);
}
if (mij + 1 <= Qdr){
q = query(2 * nod + 1, mij + 1, dr, Qst, Qdr);
}
return p + q;
}
}
int main(){
fin >> n >> m;
for (int i = 1; i <= n; i++){
fin >> a[i];
}
build(1, 1, n);
while (m--){
int o, x, y; fin >> o >> x >> y;
if (o == 0){
update(1, 1, n, x, -y);
}
else{
fout << query(1, 1, n, x, y) << '\n';
}
}
}