#include <cstdio>
#define buff_size (1<<17)
using namespace std;
char outBuff[buff_size];
int outPtr;
char buff[buff_size];
int n, v[15005*4], sol, pos;
FILE*f=freopen("datorii.in","r",stdin);
FILE*g=freopen("datorii.out","w",stdout);
void update(int nod, int st, int dr, int poz, int val)
{
if(st == dr){
v[nod] += val;
return;
}
int m = (st+dr)/2;
if(m >= poz)
update(2*nod, st, m, poz, val);
else
update(2*nod+1, m+1, dr, poz, val);
v[nod] = v[nod*2] + v[nod*2+1];
}
void ask(int nod, int st, int dr, int f, int l)
{
if(st >= f && dr <= l){
sol += v[nod];
return;
}
int m = (st+dr)/2;
if(m >= f)
ask(2*nod, st, m, f, l);
if(m < l)
ask(2*nod + 1, m+1, dr, f, l);
}
bool isdigit(char q)
{
if(q >= '0' && q <= '9')
return true;
return false;
}
inline void read(int &nr)
{
while(!isdigit(buff[pos])) if(++pos == buff_size) fread(buff, 1,buff_size, stdin), pos = 0;
nr = 0;
while(isdigit(buff[pos]))
{
nr = (nr<<1)+(nr<<3)+ buff[pos] - 48;
if(++pos == buff_size) fread(buff, 1, buff_size, stdin), pos = 0;
}
}
inline void putChar(const char &C) {
outBuff[outPtr++] = C;
if (outPtr == buff_size) {
fwrite(outBuff, 1, buff_size, stdout);
outPtr = 0;
}
}
inline void write(int X) {
static char digs[10];
int n = 0, q;
do {
q = X / 10;
digs[n++] = X - (q << 1) - (q << 3) + 48;
X = q;
} while (X);
while (n--) {
putChar(digs[n]);
}
}
int main()
{
int m;
read(n);
read(m);
for (int i = 1; i <= n; ++i){
int x;
read(x);
update(1, 1, n, i, x);
}
while(m--){
int t, a, b;
read(t);
read(a);
read(b);
if(t == 0)
update(1, 1, n, a, -b);
else{
sol = 0;
ask(1, 1, n, a, b);
write(sol);
putChar('\n');
}
}
fwrite(outBuff, 1, outPtr, stdout);
return 0;
}