#include <iostream>
#include <fstream>
using namespace std;
#define MaxN 15000
int aint[4*MaxN], v[MaxN];
void build(int nod, int left, int right)
{
if(left==right)
{
aint[nod]=v[left];
return;
}
int mid, lson, rson;
mid=(left+right)/2;
lson=nod*2;
rson=lson+1;
build(lson, left, mid);
build(rson, mid+1, right);
aint[nod]=aint[lson] + aint[rson];
}
int query(int nod, int nleft, int nright, int qleft, int qright)
{
if(nleft>=qleft && nright<=qright)
return aint[nod];
int mid, lson, rson, res;
mid=(nleft+nright)/2;
lson=nod*2;
rson=lson+1;
res=0;
if(qleft<=mid)
res+=query(lson, nleft, mid, qleft, qright);
if(mid<qright)
res+=query(rson, mid+1, nright, qleft, qright);
return res;
}
void update(int nod, int left, int right, int poz, int val)
{
if(left==right)
{
aint[nod]-=val;
return;
}
int mid, lson, rson;
mid=(left+right)/2;
lson=2*nod;
rson=lson+1;
if(poz<=mid)
update(lson, left, mid, poz, val);
else
update(rson, mid+1, right, poz, val);
aint[nod]=aint[lson]+aint[rson];
}
int main()
{
ifstream in("datorii.in");
ofstream out("datorii.out");
int n, q, i, j, type, a, b;
in>>n>>q;
for(i=1; i<=n; i++)
{
in>>v[i];
}
build(1, 1, n);
for(i=0; i<q; i++)
{
in>>type>>a>>b;
if(type==1)
{
out<<query(1, 1, n, a, b)<<'\n';
}
else
{
update(1, 1, n, a, b);
}
}
return 0;
}