#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#define INT_MAX 2147483647;
std::ifstream f("datorii.in");
std::ofstream g("datorii.out");
const int N_MAX = 15005;
int a[N_MAX], v[4*N_MAX], res;
int n, m, x, c, A, B;
void build(int st, int dr, int nod){
if (st == dr) {
v[nod] = a[st];
}
else {
int mij = (st + dr) / 2;
build(st, mij, 2 * nod);
build(mij + 1, dr, 2 * nod + 1);
v[nod] = v[2 * nod] + v[2 * nod + 1];
}
}
void update(int nod, int st, int dr, int pos, int val, bool modify = true)
{
if (st == dr)
{
if (modify)
v[nod] -= val; // s-a mai platit din rata
else
{
v[nod] = val;
}
}
else
{
int mij = (st + dr) / 2;
if (mij >= pos)
update(nod * 2, st, mij, pos, val, modify);
else
update(nod * 2 + 1, mij + 1, dr, pos, val, modify);
v[nod] = v[nod * 2] + v[nod * 2 + 1];
}
}
void call(int nod, int st, int dr, int a, int b) {
if (a <= st && dr <= b) {
res += v[nod];
return;
}
else {
int mij = (st + dr) / 2;
if (mij >= a)
call(nod * 2, st, mij, a, b);
if (mij + 1 <= b)
call(nod * 2 + 1, mij + 1, dr, a, b);
}
}
int main(void)
{
f >> n >> m;
for (int i = 1; i <= n; ++i) {
f >> a[i];
//int nod, int st, int dr, int pos, int val
/*update(1, 1, n, i, x);*/
}
build(1, n, 1);
for (int i = 1; i <= m; ++i)
{
f >> c >> A >> B;
if (c == 1) {
res = 0;
call(1, 1, n, A, B);
g << res << '\n';
}
else
{
update(1, 1, n, A, B, 1);
}
}
}