#include <fstream>
#define NMAX 15001
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, q, v[NMAX], aint[4 * NMAX],task,a,b,ans;
void build(int nod, int st, int dr)
{
if(st == dr)
{
aint[nod] = v[st];
return;
}
int mid = st + (dr - st) / 2;
build(nod << 1 , st , mid);
build(nod << 1 | 1 , mid + 1 , dr);
aint[nod] = aint[nod << 1] + aint[nod << 1 | 1];
}
void update(int nod, int st, int dr , int poz, int val)
{
if(poz < st || poz > dr)
return;
if(st == dr && st == poz)
{
aint[nod] -= val;
return;
}
int mid = st + (dr - st) /2 ;
update(nod << 1, st, mid, poz, val);
update(nod << 1|1, mid + 1, dr, poz, val);
aint[nod] = aint[nod << 1] + aint[nod << 1 | 1];
}
void query(int nod, int st, int dr, int l, int r)
{
if(l <= st && dr <= r)
{
ans += aint[nod];
return;
}
int mid = st + (dr - st) / 2;
if(l <= mid)
query(nod << 1,st, mid, l, r);
if(mid < r)
query(nod << 1 | 1, mid + 1, dr, l, r);
}
int main()
{
f >> n >> q;
for(int i = 1; i <= n; ++i)
f >> v[i];
build(1,1,n);
/*
for(int i = 1; i <= 4*n; ++i)
g << aint[i] << '\n';
*/
while(q--)
{
f >> task >> a >> b;
if(task == 1)
{
ans = 0;
query(1,1,n,a,b);
g << ans << '\n';
}
else update(1,1,n,a,b);
}
f.close(); g.close();
return 0;
}