#include <iostream>
#include <fstream>
#define MAX_N 100000
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
struct
{
int V[2 * MAX_N + 5];
int get(int st, int dr, int node, int l, int r)
{
if (l >= st && r <= dr)
return V[node];
int mij = (l + r) / 2, res = 0;
if (st <= mij)
res += get(st, dr, node * 2, l, mij);
if (dr > mij)
res += get(st, dr, node * 2 + 1, mij + 1, r);
return res;
}
void set(int pos, int val, int node, int l, int r)
{
if (l == r) {
V[node] = val;
return;
}
int mij = (l + r) / 2;
if (pos <= mij)
set(pos, val, node * 2, l, mij);
else
set(pos, val, node * 2 + 1, mij + 1, r);
V[node] = V[node * 2] + V[node * 2 + 1];
}
} it;
int N, M;
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; ++i)
{
int a;
fin >> a;
it.set(i, a, 1, 1, N);
}
for (int i = 1; i <= M; ++i)
{
int op, a, b;
fin >> op >> a >> b;
if (op == 0)
fout << it.get(a, b, 1, 1, N) << '\n';
else if (op == 1)
it.set(a, b, 1, 1, N);
}
return 0;
}