#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define pf push_front
#define ii pair<ll, ll>
#define int long long
using namespace std;
const ll N = 2e5+7;
const ll inf = 1e18;
const ll mod = 1e9+7;
int n,q;
int a[N];
int tree[200007];
int sie=200007;
void update(int id,int v){
while(id<sie){
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)%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 o,b,c;
cin >> o >> b >> c;
if(o==1){
update(b,c-a[b]);
}
else{
cout << get(c)-get(b-1) << '\n';
}
}
}
main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
// int t; cin >> t;
// while(t--)
solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBwZiBwdXNoX2Zyb250CiNkZWZpbmUgaWkgcGFpcjxsbCwgbGw+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgbGwgTiA9IDJlNSs3Owpjb25zdCBsbCBpbmYgPSAxZTE4Owpjb25zdCBsbCBtb2QgPSAxZTkrNzsKCmludCBuLHE7CmludCBhW05dOwoKICBpbnQgdHJlZVsyMDAwMDddOwogIGludCBzaWU9MjAwMDA3OwoKICB2b2lkIHVwZGF0ZShpbnQgaWQsaW50IHYpewogICAgd2hpbGUoaWQ8c2llKXsKICAgICAgdHJlZVtpZF09KCh0cmVlW2lkXSt2KSttb2QpJW1vZDsKICAgICAgaWQrPWlkJi1pZDsKICAgIH0KICB9CgogIGludCBnZXQoaW50IGlkKXsKICAgIGludCBzdW09MDsKICAgIHdoaWxlKGlkPjApewogICAgICBzdW09KHN1bSt0cmVlW2lkXSttb2QpJW1vZDsKICAgICAgaWQtPWlkJi1pZDsKICAgIH0KICAgIHJldHVybiBzdW07CiAgfQoKCgp2b2lkIHNvbHZlKCkgeyAKCiAgICBjaW4gPj4gbiA+PiBxOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIHVwZGF0ZShpLGFbaV0pOwogICAgfQogICAgd2hpbGUocS0tKXsKICAgICAgICBpbnQgbyxiLGM7CiAgICAgICAgY2luID4+IG8gPj4gYiA+PiBjOwogICAgICAgIGlmKG89PTEpewogICAgICAgICAgICB1cGRhdGUoYixjLWFbYl0pOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBjb3V0IDw8IGdldChjKS1nZXQoYi0xKSA8PCAnXG4nOwogICAgICAgIH0KICAgIH0KfQptYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsKICAgIC8vIGludCB0OyBjaW4gPj4gdDsKICAgIC8vIHdoaWxlKHQtLSkKICAgICAgICBzb2x2ZSgpOwp9