#include <iostream>
#include <fstream>
using namespace std;
#define in fin
#define out fout
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int MAXN = 15e3;
int n, x, nrQ, task, a, b;
int aint[4*MAXN];
void update(int a, int b, int nod, int poz, int val) {
if (a == b) {
aint[nod] = val;
return;
}
int mid = (a + b) / 2;
if (poz <= mid)
update(a, mid, 2*nod, poz, val);
else
update(mid + 1, b, 2*nod + 1, poz, val);
aint[nod] = aint[2*nod] + aint[2*nod + 1];
}
int query(int a, int b, int nod, int st, int dr) {
int sumSt = 0, sumDr = 0;
if (st <= a && b <= dr)
return aint[nod];
int mid = (a + b) / 2;
if (st <= mid)
sumSt = query(a, mid, 2*nod, st, dr);
if (mid < dr)
sumDr = query(mid + 1, dr, 2*nod + 1, st, dr);
return sumSt + sumDr;
}
int main() {
in >> n >> nrQ;
for (int i = 1; i <= n; i++)
in >> x,
update(1, n, 1, i, x);
for (int i = 1; i <= nrQ; i++) {
in >> task >> a >> b;
if (task == 0) {
//update(1, n, 1, a, b);
}
else
out << query(1, n, 1, a, b) << '\n';
}
return 0;
}