#include<bits/stdc++.h>
using namespace std;
long long build(long long* tree,int i,int tl,int tr,int* a)
{
if(tl==tr)
{
tree[i]=a[tl];
return tree[i];
}
int m=(tl+tr)/2; /// tl=0 tr=7 root m=3
/// left: tl=0 tr=m=3
tree[2*i+1]=build(tree,2*i+1,tl,m,a);
/// right: tl=m+1=4 tr=7
tree[2*i+2]=build(tree,2*i+2,m+1,tr,a);
tree[i]=(tree[2*i+1]+tree[2*i+2]);
return tree[i];
}
long long update(long long* tree,int i,int tl,int tr,int l,long long a) /// a[l]=11
{
if(tl==tr && tl==l)
{
tree[i]=a;
return tree[i];
}
if(l<tl || l>tr)
{
return tree[i];
}
int m=(tl+tr)/2;
tree[2*i+1]=update(tree,2*i+1,tl,m,l,a);
tree[2*i+2]=update(tree,2*i+2,m+1,tr,l,a);
tree[i]=(tree[2*i+1]+tree[2*i+2]);
return tree[i];
}
long long query(long long* tree,int i,int tl,int tr,int l,int r)
{
/// full overlap
if(tl>=l && tr<=r)
{
return tree[i];
}
/// no overlap
if(r<tl || l>tr)
{
return 0;
}
/// partial overlap
int m=(tl+tr)/2;
int left=query(tree,2*i+1,tl,m,l,r);
int right=query(tree,2*i+2,m+1,tr,l,r);
return (left+right);
}
int main()
{
int n; cin >> n;
int q; cin >> q;
int a[n];
for(int i=0;i<n;i++) cin >> a[i];
long long tree[4*n];
build(tree,0,0,n-1,a);
while(q--)
{
int ch; cin >> ch;
if(ch==2)
{
int l,r; cin >> l >> r;
l--,r--;
long long ans=query(tree,0,0,n-1,l,r);
cout << ans << endl;
}
else if(ch==1)
{
int l; cin >> l;
long long v;
cin>>v;
l--;
// a[l]=v;
update(tree,0,0,n-1,l,v);
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgYnVpbGQobG9uZyBsb25nKiB0cmVlLGludCBpLGludCB0bCxpbnQgdHIsaW50KiBhKQp7CiAgICBpZih0bD09dHIpCiAgICB7CiAgICAgICAgdHJlZVtpXT1hW3RsXTsKICAgICAgICByZXR1cm4gdHJlZVtpXTsKICAgIH0KICAgIGludCBtPSh0bCt0cikvMjsgLy8vIHRsPTAgdHI9NyByb290IG09MwoKICAgIC8vLyBsZWZ0OiB0bD0wIHRyPW09MwogICAgdHJlZVsyKmkrMV09YnVpbGQodHJlZSwyKmkrMSx0bCxtLGEpOwoKICAgIC8vLyByaWdodDogdGw9bSsxPTQgdHI9NwogICAgdHJlZVsyKmkrMl09YnVpbGQodHJlZSwyKmkrMixtKzEsdHIsYSk7CgogICAgdHJlZVtpXT0odHJlZVsyKmkrMV0rdHJlZVsyKmkrMl0pOwoKICAgIHJldHVybiB0cmVlW2ldOwoKfQoKbG9uZyBsb25nIHVwZGF0ZShsb25nIGxvbmcqIHRyZWUsaW50IGksaW50IHRsLGludCB0cixpbnQgbCxsb25nIGxvbmcgYSkgLy8vIGFbbF09MTEKewogICAgaWYodGw9PXRyICYmIHRsPT1sKQogICAgewogICAgICAgIHRyZWVbaV09YTsKICAgICAgICByZXR1cm4gdHJlZVtpXTsKICAgIH0KICAgIGlmKGw8dGwgfHwgbD50cikKICAgIHsKICAgICAgICByZXR1cm4gdHJlZVtpXTsKICAgIH0KICAgIGludCBtPSh0bCt0cikvMjsKICAgIHRyZWVbMippKzFdPXVwZGF0ZSh0cmVlLDIqaSsxLHRsLG0sbCxhKTsKICAgIHRyZWVbMippKzJdPXVwZGF0ZSh0cmVlLDIqaSsyLG0rMSx0cixsLGEpOwogICAgdHJlZVtpXT0odHJlZVsyKmkrMV0rdHJlZVsyKmkrMl0pOwogICAgcmV0dXJuIHRyZWVbaV07Cn0KCmxvbmcgbG9uZyBxdWVyeShsb25nIGxvbmcqIHRyZWUsaW50IGksaW50IHRsLGludCB0cixpbnQgbCxpbnQgcikKewogICAgLy8vIGZ1bGwgb3ZlcmxhcAogICAgaWYodGw+PWwgJiYgdHI8PXIpCiAgICB7CiAgICAgICAgcmV0dXJuIHRyZWVbaV07CiAgICB9CgogICAgLy8vIG5vIG92ZXJsYXAKICAgIGlmKHI8dGwgfHwgbD50cikKICAgIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAvLy8gcGFydGlhbCBvdmVybGFwCiAgICBpbnQgbT0odGwrdHIpLzI7CiAgICBpbnQgbGVmdD1xdWVyeSh0cmVlLDIqaSsxLHRsLG0sbCxyKTsKICAgIGludCByaWdodD1xdWVyeSh0cmVlLDIqaSsyLG0rMSx0cixsLHIpOwogICAgcmV0dXJuIChsZWZ0K3JpZ2h0KTsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgbjsgY2luID4+IG47CiAgICAgaW50IHE7IGNpbiA+PiBxOwogICAgaW50IGFbbl07CiAgICBmb3IoaW50IGk9MDtpPG47aSsrKSBjaW4gPj4gYVtpXTsKCiAgICBsb25nIGxvbmcgdHJlZVs0Km5dOwogICAgYnVpbGQodHJlZSwwLDAsbi0xLGEpOwoKCgogICAKICAgIHdoaWxlKHEtLSkKICAgIHsKICAgICAgICBpbnQgY2g7IGNpbiA+PiBjaDsKICAgICAgICBpZihjaD09MikKICAgICAgICB7CiAgICAgICAgICAgIGludCBsLHI7IGNpbiA+PiBsID4+IHI7CiAgICAgICAgICAgIGwtLSxyLS07CiAgICAgICAgICAgIGxvbmcgbG9uZyBhbnM9cXVlcnkodHJlZSwwLDAsbi0xLGwscik7CiAgICAgICAgICAgIGNvdXQgPDwgYW5zIDw8IGVuZGw7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoY2g9PTEpCiAgICAgICAgewogICAgICAgICAgICBpbnQgbDsgY2luID4+IGw7CiAgICAgICAgICAgIGxvbmcgbG9uZyB2OwogICAgICAgICAgICBjaW4+PnY7CiAgICAgICAgICAgIGwtLTsKICAgICAgICAgICAvLyBhW2xdPXY7CiAgICAgICAgICAgIHVwZGF0ZSh0cmVlLDAsMCxuLTEsbCx2KTsKICAgICAgICB9CgogICAgfQoKICAgIHJldHVybiAwOwp9Cgo=