#include <bits/stdc++.h>
#define NMAX 15010
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, v[NMAX], aint[4*NMAX], ans, a, b,task;
void build(int nod, int st, int dr)
{
if(st == dr)
{
aint[nod] = v[st];
return;
}
int mid = st + (dr - st) / 2;
build(nod << 1, st , mid);
build(nod << 1 | 1, mid + 1, dr);
aint[nod] = aint[nod << 1] + aint[nod << 1 | 1];
}
void update(int nod, int st, int dr, int poz, int val)
{
if(poz < st || poz > dr)
return;
if(poz == st && st == dr)
{
aint[nod] = val;
return;
}
int mid = st + (dr - st) / 2;
update(nod << 1, st, mid, poz, val);
update(nod << 1 | 1, mid + 1, dr, poz, val);
aint[nod] = aint[nod << 1] + aint[nod << 1 | 1];
}
void querry(int nod, int st, int dr, int left, int right)
{
if(left <= st && dr <= right)
{
ans += aint[nod];
return;
}
int mid = st + (dr - st) / 2;
if(left <= mid)
querry(nod << 1, st, mid, left, right);
if(mid < right)
querry(nod << 1 | 1, mid + 1, dr, left, right);
}
int main()
{
f >> n >> m;
for(int i = 1; i <= n; ++i)
f >> v[i];
build(1, 1, n);
while(m--)
{
f >> task >> a >> b;
if(task == 0)
{
b = v[a] - b;
update(1, 1, n, a, b);
}
else
{
ans = 0;
querry(1, 1, n, a, b);
g << ans << '\n';
}
}
f.close();
g.close();
return 0;
}