#include <bits/stdc++.h>
#define ll long long
#define int long long
#define fi first
#define se second
#define pb push_back
#define pf push_front
#define ii pair<ll, ll>
using namespace std;
const int N = 2e5 + 7;
const int MOD = 1e9 + 7;
int n, q;
int a[N];
int tree[N];
void update(int id, int v) {
while (id <= n) {
tree[id] = (tree[id] + v + MOD) % MOD;
id += id & -id;
}
}
int get(int id) {
int sum = 0;
while (id > 0) {
sum = (sum + tree[id]) % MOD;
id -= id & -id;
}
return sum;
}
void solve() {
cin >> n >> q;
for (int i = 1; i <= n; i++) {
cin >> a[i];
update(i, a[i]);
}
while (q--) {
int type, b, c;
cin >> type >> b >> c;
if (type == 1) {
update(b, c - a[b]);
a[b] = c;
} else {
int res = (get(c) - get(b - 1) + MOD) % MOD;
cout << res << '\n';
}
}
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcGYgcHVzaF9mcm9udAojZGVmaW5lIGlpIHBhaXI8bGwsIGxsPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAyZTUgKyA3Owpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKCmludCBuLCBxOwppbnQgYVtOXTsKaW50IHRyZWVbTl07Cgp2b2lkIHVwZGF0ZShpbnQgaWQsIGludCB2KSB7CiAgICB3aGlsZSAoaWQgPD0gbikgewogICAgICAgIHRyZWVbaWRdID0gKHRyZWVbaWRdICsgdiArIE1PRCkgJSBNT0Q7CiAgICAgICAgaWQgKz0gaWQgJiAtaWQ7CiAgICB9Cn0KCmludCBnZXQoaW50IGlkKSB7CiAgICBpbnQgc3VtID0gMDsKICAgIHdoaWxlIChpZCA+IDApIHsKICAgICAgICBzdW0gPSAoc3VtICsgdHJlZVtpZF0pICUgTU9EOwogICAgICAgIGlkIC09IGlkICYgLWlkOwogICAgfQogICAgcmV0dXJuIHN1bTsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgICAgICB1cGRhdGUoaSwgYVtpXSk7CiAgICB9CgogICAgd2hpbGUgKHEtLSkgewogICAgICAgIGludCB0eXBlLCBiLCBjOwogICAgICAgIGNpbiA+PiB0eXBlID4+IGIgPj4gYzsKICAgICAgICBpZiAodHlwZSA9PSAxKSB7CiAgICAgICAgICAgIHVwZGF0ZShiLCBjIC0gYVtiXSk7IAogICAgICAgICAgICBhW2JdID0gYzsgCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaW50IHJlcyA9IChnZXQoYykgLSBnZXQoYiAtIDEpICsgTU9EKSAlIE1PRDsKICAgICAgICAgICAgY291dCA8PCByZXMgPDwgJ1xuJzsKICAgICAgICB9CiAgICB9Cn0KCmludDMyX3QgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIHNvbHZlKCk7Cn0K