#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int arb[500004];
inline unsigned int
arbQry(int n, int st, int dr, int x, int y) {
int st2, dr2, mid;
dr2 = st2 = 0;
if (st >= x && dr <= y)
return arb[n];
// mid = st + (dr - st) / 2;
mid = (st + dr) >> 1;
if (x <= mid) {
st2 = arbQry((n << 1), st, mid, x, y);
}
if (y > mid) {
dr2 = arbQry(-(~(n << 1)), mid + 1, dr, x, y);
}
return st2 + dr2;
}
inline void arbUpd(int n, int st, int dr, int p, int val, bool build) {
if (st == dr) {
arb[n] = (build ? val : (arb[n] - val));
return;
}
// int mid = st + (dr - st) / 2;
int mid = (st + dr) >> 1;
if (p <= mid) {
arbUpd((n << 1), st, mid, p, val, build);
} else {
arbUpd(-(~(n << 1)), mid + 1, dr, p, val, build);
}
arb[n] = arb[(n << 1)] + arb[-(~(n << 1))];
}
int main() {
int n, m, i, x, y, aleg;
fin >> n >> m;
for (i = 1; i <= n; ++i) {
fin >> x;
arbUpd(1, 1, n, i, x, true);
}
for (i = 0; i < m; ++i) {
fin >> aleg;
if (aleg == 1) {
fin >> x >> y;
fout << arbQry(1, 1, n, x, y) << '\n';
} else {
fin >> x >> y;
arbUpd(1, 1, n, x, y, false);
}
}
return 0;
}