#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=(int)5e5;
struct node
{
int ls,rs,s;
}s[N<<1];
int n,m,a[N],nd=0;
void update(int x)
{
s[x].s=s[s[x].ls].s+s[s[x].rs].s;
}
void build(int id,int l,int r)
{
if (l==r)
{
s[id].s=a[l];
return ;
}
int mid=(l+r)>>1;
build(s[id].ls=++nd,l,mid);
build(s[id].rs=++nd,mid+1,r);
update(id);
}
void add(int id,int l,int r,int pos,int data)
{
if (l==r)
{
s[id].s+=data;
return ;
}
int mid=(l+r)>>1;
if (id<=mid) add(s[id].ls,l,mid,pos,data);
else add(s[id].rs,mid+1,r,pos,data);
update(id);
}
int calc(int id,int l,int r,int ll,int rr)
{
int mid=(l+r)>>1;
if (l>rr||r<ll) return 0;
else if (l>=ll&&r<=rr) return s[id].s;
else return calc(s[id].ls,l,mid,ll,rr)+calc(s[id].rs,mid+1,r,ll,rr);
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for (int i=1;i<=n;i++) cin>>a[i];
build(++nd,1,n);
while (m--)
{
int op,x,y;
cin>>op>>x>>y;
if (op==1)
{
add(1,1,n,x,y);
}
else
{
cout<<calc(1,1,n,x,y)<<'\n';
}
}
return 0;
}