#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m, cod, t, v, a[15001], aint[400002], poz, val;
void build(int nod, int st, int dr)
{
if(st == dr)
{
aint[nod] = a[st];
return;
}
int mid = (st + dr) / 2;
build(nod << 1, st, mid);
build(nod << 1|1, mid+1, dr);
aint[nod] = aint[nod << 1] + aint[nod << 1|1];
}
void update(int nod, int st, int dr, int poz, int val)
{
if(st == dr){
aint[nod] -= val;
return;
}
int mid = (st + dr) / 2;
if(poz <= mid)
update(nod << 1, st, mid, poz, val);
else
update(nod << 1|1, mid+1, dr, poz, val);
aint[nod] = aint[nod << 1] + aint[nod << 1|1];
}
int query(int nod, int st, int dr, int left, int right)
{
if (dr < left || st > right)
return 0;
if (left <= st && dr <= right)
return aint[nod];
int m = (st + dr) / 2;
return query(nod * 2, st, m, left, right) + query(nod * 2 + 1, m + 1, dr, left, right);
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> a[i];
build(1, 1, n);
for (int i = 1; i <= m; i++) {
fin >> cod;
if (cod == 0) {
fin >> t >> v;
update(1, 1, n, t, v);
}
else {
fin >> poz >> val;
fout << query(1, 1, n, poz, val) << "\n";
}
}
return 0;
}