#include <stdio.h>
#define NMax 100005
#define maxim(a, b) ( (a > b) ? a : b )
int n, m, ar[4*NMax];
void update(int nod, int in, int sf, int pos, int val);
int querry(int nod, int in, int sf, int a, int b);
int main()
{
int i, x, t, a, b;
FILE *fin = fopen("datorii.in", "rt");
FILE *fout = fopen("datorii.out", "wt");
fscanf(fin, "%d %d", &n, &m);
for (i = 1; i <= n; i++)
{
fscanf(fin, "%d", &x);
update(1, 1, n, i, x);
}
for (i = 1; i <= m; i++)
{
fscanf(fin, "%d %d %d", &t, &a, &b);
if (!t)
{
update(1, 1, n, a, -b);
}
else
{
int rez = querry(1, 1, n, a, b);
fprintf(fout, "%d\n", querry(1, 1, n, a, b));
}
}
fclose(fin);
fclose(fout);
return 0;
}
int mi;
void update(int nod, int in, int sf, int pos, int val)
{
if (in == sf)
{
ar[nod] += val;
}
else
{
mi = (in + sf) / 2;
if (pos <= mi)
update(2*nod, in, mi, pos, val);
else
update(2*nod+1, mi+1, sf, pos, val);
ar[nod] = ar[2*nod] + ar[2*nod+1];
}
}
int querry(int nod, int in, int sf, int a, int b)
{
if (a <= in && b >= sf)
return ar[nod];
int mi = (in + sf) / 2;
if (a <= mi && b >= mi + 1)
return querry(2*nod, in, mi, a, b) + querry(2*nod+1, mi+1, sf, a, b);
if (a <= mi)
return querry(2*nod, in, mi, a, b);
//if (b >= mi + 1)
return querry(2*nod+1, mi+1, sf, a, b);
}