#include <bits/stdc++.h>
using namespace std;
#define int long long int
const int NMAX = 1e5 + 7;
int a[4*NMAX], v[NMAX], n, m, x, y, op;
void build(int node, int st, int dr) {
if (st == dr)
a[node] = v[st];
else {
int mij = (st + dr)/2;
build(node*2, st, mij);
build(node*2+1, mij+1, dr);
a[node] = a[node*2] + a[node*2+1];
}
}
void update(int node, int st, int dr, int poz, int val) {
if (st == dr)
a[node] = val;
else {
int mij = (st + dr)/2;
if (poz <= mij)
update(node*2, st, mij, poz, val);
else
update(node*2+1, mij+1, dr, poz, val);
a[node] = a[node*2] + a[node*2+1];
}
}
int query(int node, int st, int dr, int l, int r) {
if (l <= st && dr <= r)
return a[node];
else {
int mij = (st+dr)/2;
if (l > mij)
return query(node*2+1, mij+1, dr, l, r);
else if (r <= mij)
return query(node*2, st, mij, l, r);
else
return query(node*2, st, mij, l, r) + query(node*2+1, mij+1, dr, l, r);
}
}
signed main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
cin.tie(0)->sync_with_stdio(false);
cin >> n >> m;
for (int i =1; i <= n; i++)
cin >> v[i];
build(1, 1, n);
for (int i = 1; i <= m; i++) {
cin >> op >> x >> y;
if (op == 1)
cout << query(1, 1, n, x, y) << '\n';
else
update(1, 1, n, x, v[x] - y);
}
return 0;
}