#include <bits/stdc++.h>
using namespace std;
const int MAXN=15205;
const int MAXB=200;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
struct node{
int sum;
};
struct sqrt_dec{
int v[MAXN];
node b[MAXB];
int nb=0;
int n=0;
int bs=0;
void init(int lung)
{
int n=lung;
nb=sqrt(n+1);
bs=n/nb+1;
for(int i=0;i<n;i++)
{
fin>>v[i];
}
}
void build()
{
for(int i=0;i<nb;i++)
{
int start=i*bs;
for(int j=0;j<bs;j++)
{
b[i].sum+=v[j+start];
}
}
}
int suma_vec(int *v, int l, int r)
{
int suma=0;
for(int i=l;i<r;i++)
{
suma+=v[i];
}
return suma;
}
int suma_buc(node *v, int l, int r)
{
int suma=0;
for(int i=l;i<r;i++)
{
suma+=v[i].sum;
}
return suma;
}
int suma_frag(int l,int r)
{
return suma_vec(v,l,r);
}
int suma_bucket(int l, int r)
{
return suma_buc(b,l,r);
}
int query(int l, int r)
{
int bl=l/bs;
int br=r/bs;
if(bl==br)
{
return suma_frag(l,r);
}
else
{
int rasp=0;
rasp+=suma_frag(l,(bl+1)*bs);
rasp+=suma_frag(br*bs,r);
rasp+=suma_bucket(bl+1,br);
return rasp;
}
}
void add(int poz, int x)
{
v[poz]+=x;
b[poz/bs].sum+=x;
}
};
sqrt_dec decomp;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,m;
fin>>n>>m;
decomp.init(n);
decomp.build();
for(int i=1;i<=m;i++)
{
int tip;
fin>>tip;
if(tip==0)
{
int poz,val;
fin>>poz>>val;
decomp.add(poz-1,-val);
}
else
{
int l,r;
fin>>l>>r;
fout<<decomp.query(l-1,r)<<'\n';
}
}
return 0;
}