Link
#include<bits/stdc++.h>
using namespace std;
long long tree[500010*4];
long long a[500010];
void up(int root)
{
tree[root]=tree[root*2]+tree[root*2+1];
return;
}
void build(int root,int l,int r)
{
if(l==r)
{
tree[root]=a[l];
return;
}
int mid=l+r>>1;
build(root*2,l,mid);
build(root*2+1,mid+1,r);
up(root);
}
void update(int root,int l,int r,int x,int y)
{
if(l==r)
{
tree[root]=y;
return;
}
int mid=l+r>>1;
if(x<=mid)
{
update(root*2,l,mid,x,y);
}
else if(x>mid)
{
update(root*2+1,mid+1,r,x,y);
}
up(root);
}
long long query(int root,int l,int r,int x,int y)
{
if(x<=l&&y>=r)
{
return tree[root];
}
long long ans=0;
int mid=l+r>>1;
if(x<=mid)
{
ans+=query(root*2,l,mid,x,y);
}
if(y>mid)
{
ans+=query(root*2+1,mid+1,r,x,y);
}
return ans;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
build(1,1,n);
for(int i=1;i<=m;i++)
{
int op;
cin>>op;
int x,y;
cin>>x>>y;
if(op==1)
{
update(1,1,n,x,y);
}
else
{
cout<<query(1,1,n,x,y)<<'\n';
}
}
return 0;
}