#include <fstream>
#define lim 15000
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int aint[4*lim+5];
void build(int* src, int nod, int st, int dr)
{
if(st>dr) return;
if(st==dr)
aint[nod]=src[st];
else
{
int mij = (st+dr)/2;
build(src, 2*nod, st, mij);
build(src, 2*nod+1, mij+1, dr);
aint[nod] = aint[2*nod] + aint[2*nod+1];
}
}
void update(int poz, int val, int nod, int st, int dr)
{
if(st>dr || poz<st || poz>dr) return;
if(st==dr)
aint[nod] -= val;
else
{
int mij = (st+dr)/2;
update(poz, val, 2*nod, st, mij);
update(poz, val, 2*nod+1, mij+1, dr);
aint[nod] = aint[2*nod] + aint[2*nod+1];
}
}
int query(int ql, int qr, int nod, int st, int dr)
{
if(st>dr || qr<st || ql>dr) return 0;
if(ql <= st && qr >= dr)
return aint[nod];
else
{
int mij = (st+dr)/2;
int ansleft = query(ql, qr, 2*nod, st, mij);
int ansright = query(ql, qr, 2*nod+1, mij+1, dr);
return ansleft+ansright;
}
}
int v[lim+5],n,m;
int main()
{
in>>n>>m;
for(int i=1;i<=n;i++) in>>v[i];
build(v, 1, 1, n);
for(int i=1;i<=m;i++)
{
int t,a,b;
in>>t>>a>>b;
if(t==0)
update(a,b,1,1,n);
else
out<<query(a,b,1,1,n)<<'\n';
}
return 0;
}