#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e5 + 5;
int n, q;
// int a[N];
ll seg[4 * N];
// void build(int id, int l, int r) { // O(n)
// if (l == r) {
// seg[id] = a[l];
// return;
// }
// int mid = (l + r) >> 1;
// build(id * 2, l, mid);
// build(id * 2 + 1, mid + 1, r);
// seg[id] = seg[id * 2] + seg[id * 2 + 1];
// }
void update(int id, int l, int r, int pos, int val) { // O(log2(n))
// đoạn [l, r] không liên quan gì đến vị trí cần update
if (l > pos || r < pos) return;
// đoạn [l, r] chứa pos
if (l == r) {
seg[id] = val;
return;
}
int mid = (l + r) >> 1;
update(id * 2, l, mid, pos, val);
update(id * 2 + 1, mid + 1, r, pos, val);
seg[id] = seg[id * 2] + seg[id * 2 + 1];
}
ll get(int id, int l, int r, int u, int v) { // O(log2(n))
// [l, r] không liên quan gì đến đoạn cần truy vấn [u, v]
if (l > v || r < u) return 0;
// [l, r] nằm trọn trong [u, v]
if (u <= l && r <= v) return seg[id];
// [l, r] giao một phần với [u, v]
int mid = (l + r) >> 1;
return get(id * 2, l, mid, u, v) + get(id * 2 + 1, mid + 1, r, u, v);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
// for (int i = 1; i <= n; i++) cin >> a[i];
// build(1, 1, n);
while (q--) {
int type; cin >> type;
if (type == 1) {
int pos, val;
cin >> pos >> val;
update(1, 1, n, pos, val);
}
else {
int l, r;
cin >> l >> r;
cout << get(1, 1, n, l, r) << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxZTUgKyA1OyAKCmludCBuLCBxOyAgCi8vIGludCBhW05dOyAKCmxsIHNlZ1s0ICogTl07ICAKCi8vIHZvaWQgYnVpbGQoaW50IGlkLCBpbnQgbCwgaW50IHIpIHsgLy8gTyhuKQovLyAJaWYgKGwgPT0gcikgewovLyAJCXNlZ1tpZF0gPSBhW2xdOyAgCi8vIAkJcmV0dXJuOwovLyAJfQovLyAJaW50IG1pZCA9IChsICsgcikgPj4gMTsgIAovLyAJYnVpbGQoaWQgKiAyLCBsLCBtaWQpOyAKLy8gCWJ1aWxkKGlkICogMiArIDEsIG1pZCArIDEsIHIpOyAgIAovLyAJc2VnW2lkXSA9IHNlZ1tpZCAqIDJdICsgc2VnW2lkICogMiArIDFdOyAKLy8gfQoKdm9pZCB1cGRhdGUoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCBwb3MsIGludCB2YWwpIHsgLy8gTyhsb2cyKG4pKQoJLy8gxJFv4bqhbiBbbCwgcl0ga2jDtG5nIGxpw6puIHF1YW4gZ8OsIMSR4bq/biB24buLIHRyw60gY+G6p24gdXBkYXRlIAoJaWYgKGwgPiBwb3MgfHwgciA8IHBvcykgcmV0dXJuOyAgCgoJLy8gxJFv4bqhbiBbbCwgcl0gY2jhu6lhIHBvcwoJaWYgKGwgPT0gcikgewoJCXNlZ1tpZF0gPSB2YWw7ICAKCQlyZXR1cm47ICAKCX0KCWludCBtaWQgPSAobCArIHIpID4+IDE7IAoJdXBkYXRlKGlkICogMiwgbCwgbWlkLCBwb3MsIHZhbCk7IAoJdXBkYXRlKGlkICogMiArIDEsIG1pZCArIDEsIHIsIHBvcywgdmFsKTsgICAKCXNlZ1tpZF0gPSBzZWdbaWQgKiAyXSArIHNlZ1tpZCAqIDIgKyAxXTsgCn0KCmxsIGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KSB7IC8vIE8obG9nMihuKSkKCS8vIFtsLCByXSBraMO0bmcgbGnDqm4gcXVhbiBnw6wgxJHhur9uIMSRb+G6oW4gY+G6p24gdHJ1eSB24bqlbiBbdSwgdl0KCWlmIChsID4gdiB8fCByIDwgdSkgcmV0dXJuIDA7ICAgIAoKCS8vIFtsLCByXSBu4bqxbSB0cuG7jW4gdHJvbmcgW3UsIHZdCglpZiAodSA8PSBsICYmIHIgPD0gdikgcmV0dXJuIHNlZ1tpZF07ICAgCgoJLy8gW2wsIHJdIGdpYW8gbeG7mXQgcGjhuqduIHbhu5tpIFt1LCB2XQoJaW50IG1pZCA9IChsICsgcikgPj4gMTsgIAoJcmV0dXJuIGdldChpZCAqIDIsIGwsIG1pZCwgdSwgdikgKyBnZXQoaWQgKiAyICsgMSwgbWlkICsgMSwgciwgdSwgdik7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAgCQoJY2luID4+IG4gPj4gcTsgCgkvLyBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAKCgkvLyBidWlsZCgxLCAxLCBuKTsgCgoJd2hpbGUgKHEtLSkgewoJCWludCB0eXBlOyBjaW4gPj4gdHlwZTsgIAoKCQlpZiAodHlwZSA9PSAxKSB7CgkJCWludCBwb3MsIHZhbDsgCgkJCWNpbiA+PiBwb3MgPj4gdmFsOyAKCQkJdXBkYXRlKDEsIDEsIG4sIHBvcywgdmFsKTsgIAoJCX0KCQllbHNlIHsKCQkJaW50IGwsIHI7ICAKCQkJY2luID4+IGwgPj4gcjsgCgkJCWNvdXQgPDwgZ2V0KDEsIDEsIG4sIGwsIHIpIDw8ICdcbic7IAoJCX0KCX0KfQo=