#include <bits/stdc++.h>
using namespace std;
int w[800001],a[200001],n,m;
void pushup(int u)
{
w[u]=w[2*u]+w[2*u+1];
}
void build(int u,int l,int r)
{
if(l==r)
{
w[u]=a[l];
return ;
}
int mid=(l+r)/2;
build(2*u,l,mid);
build(2*u+1,mid+1,r);
pushup(u);
}
int query1(int u,int l,int r,int p)
{
if(l==r) return w[u];
int mid=(l+r)/2;
if(p<=mid) return query1(2*u,l,mid,p);
else return query1(2*u+1,mid+1,r,p);
}
void upd1(int u,int l,int r,int p,int x)
{
if(l==r)
{
w[u]+=x;
return ;
}
int mid=(l+r)/2;
if(p<=mid) return upd1(2*u,l,mid,p,x);
else return upd1(2*u+1,mid+1,r,p,x);
pushup(u);
}
bool in(int L,int R,int l,int r)
{
return (L<=l) && (R<=r) ;
}
bool ou(int L,int R,int l,int r)
{
return (r<L) || (R<l) ;
}
int query(int u,int L,int R,int l,int r)
{
if(in(L,R,l,r)) return w[u];
else if(!ou(L,R,l,r))
{
int mid=(L+R)/2;
return query(2*u,L,mid,l,r)+query(2*u+1,mid+1,R,l,r);
}
else return 0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
build(1,1,n);
int op;
int x,y;
while(m--)
{
cin>>op>>x>>y;
if(op==1) upd1(1,1,n,x,y);
else cout<<query(1,1,n,x,y)<<endl;
}
return 0;
}
**