#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int const nmax = 15000;
int aint[4 * nmax + 5];
int v[nmax + 5];
int query(int node, int st, int dr, int l, int r) {
if(l <= st && dr <= r)
return aint[node];
int med = (st + dr) >> 1;
int sum = 0;
if(l <= med)
sum += query((node << 1), st, med, l, r);
if(med < r)
sum += query((node << 1) + 1, med + 1, dr, l, r);
return sum;
}
void update(int node, int st, int dr, int poz, int val) {
if(st == dr) {
aint[node] -= val;
return;
}
int med = (st + dr) >> 1;
if(poz <= med)
update((node << 1), st, med, poz, val);
else
update((node << 1) + 1, med + 1, dr, poz, val);
aint[node] = aint[(node << 1)] + aint[(node << 1) + 1];
}
int cnt;
void build(int nod, int st, int dr) {
if(st == dr) {
aint[nod] = v[++cnt];
return;
}
int med = (st + dr) >> 1;
build((nod << 1), st, med);
build((nod << 1) + 1, med + 1, dr);
aint[nod] = aint[(nod << 1)] + aint[(nod << 1) + 1];
}
int main()
{
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; i++)
fin >> v[i];
build(1, 1, n);
while(m--) {
int tip, zi, val;
fin >> tip >> zi >> val;
if(tip == 0)
update(1, 1, n, zi, val);
else
fout << query(1, 1, n, zi, val) << "\n";
}
return 0;
}