#include <bits/stdc++.h>
#define NMAX 15009
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int a[NMAX];
int n,m;
int v[4*NMAX];
void citire();
void build (int node, int st, int dr);
void update(int node, int st, int dr, int x, int val);
int query(int node, int st, int dr, int x, int y);
int main()
{citire();
build(1,1,n);
for(int i=1;i<=m;i++)
{
int x,y,c;
fin>>c>>x>>y;
if(!c)
{
update(1,1,n,x,-y);
}
else
fout<<query(1,1,n,x,y)<<'\n';
}
return 0;
}
void citire()
{
int i;
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>v[i];
}
void build(int node, int st, int dr)
{
int mj=(st+dr)/2;
if(st==dr)
{a[node]=v[st];return;}
build(2*node,st,mj);
build(2*node+1,mj+1,dr);
a[node]=a[2*node]+a[2*node+1];
}
void update(int node,int st, int dr, int x, int val)
{
int mj=(st+dr)/2;
if(st==dr)
{
a[node]+=val;
return;
}
if(x<=mj)
update(2*node,st,mj,x,val);
if(x>mj)
update(2*node+1,mj+1,dr,x,val);
a[node]=a[2*node]+a[2*node+1];
}
int query(int node, int st, int dr, int x, int y)
{ int ans1=0;int ans2=0;
int mj=(st+dr)/2;
if(x<=st && dr<=y)
return a[node];
if(x<=mj)
ans1=query(2*node,st,mj,x,y);
if(y>mj)
ans2=query(2*node+1,mj+1,dr,x,y);
return ans1+ans2;
}