#include <bits/stdc++.h>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int arbint[4005], A[1005];
int build(int start, int eend, int nod){
if (start == eend)
{
arbint[nod] = A[start];
return A[start];
}
int mid = (start + eend)/2;
arbint[nod] = build(start, mid, nod * 2 + 1) + build(mid + 1, eend, nod * 2 + 2);
return arbint[nod];
}
void update(int i, int stanga, int dreapta, int nod, int nou)
{
if (i < stanga || i > dreapta)
return;
arbint[nod] += nou - A[i];
if(stanga != dreapta) /// adica am fii
update(i, stanga, (stanga + dreapta)/2, nod * 2 + 1, nou);
update(i, (stanga + dreapta) / 2 + 1, dreapta, nod * 2 + 2, nou);
}
int suma(int i, int j, int nod, int seg_stanga, int seg_dreapta){
if (i <= seg_stanga && j >= seg_dreapta)
{
return arbint[nod];
}
if (seg_dreapta < i || seg_stanga > j)
{
return 0;
}
int mid = (seg_stanga + seg_dreapta) / 2;
return suma(i, j, 2 * nod + 1, seg_stanga, mid) +
suma(i, j, 2 * nod + 2, mid + 1, seg_dreapta);
}
int main()
{
int N, M;
f >> N >> M;
for (int i = 0; i < N; ++i)
f >> A[i];
int optiune, t, v, p, q;
build(0, N - 1, 0);
for (int i = 0; i < M; ++i)
{
f >> optiune;
if (!optiune)
{
f >> t >> v;
update(t - 1, 0, N - 1, 0, A[t - 1] - v);
}
else
{
f >> p >> q;
g << suma(p - 1, q - 1, 0, 0, N - 1) << "\n";
}
}
return 0;
}