#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NX 65536
int N, M, A[NX], K;
void create(int l, int r, int originalPos, int currentPos, int val)
{
if (l == r)
{
if (K == 1) {
A[currentPos] = val;
} else {
A[currentPos] -= val;
}
}
else
{
int mij = (l + r) / 2;
if (originalPos <= mij)
{
create(l, mij, originalPos, 2 * currentPos, val);
}
else
{
create(mij + 1, r, originalPos, 2 * currentPos + 1, val);
}
A[currentPos] = A[2 * currentPos] + A[2 * currentPos + 1];
}
}
int query(int left, int right, int leftInt, int rightInt, int currentPos)
{
if (left == right)
{
return A[currentPos];
}
else
{
int mij = (left + right) / 2, leftRes = 0, rightRes = 0;
if (leftInt <= mij) {
leftRes = query(left, mij, leftInt, rightInt, 2 * currentPos);
}
if (rightInt > mij) {
rightRes = query(mij + 1, right, leftInt, rightInt, 2 * currentPos + 1);
}
return leftRes + rightRes;
}
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d %d", &N, &M);
K = 1;
int elem = 0;
for (int i = 1; i <= N; i++)
{
scanf("%d", &elem);
create(1, N, i, 1, elem);
}
K = 0;
int cod = 0, a = 0, b = 0;
for (int i = 1; i <= M; i++)
{
scanf("%d %d %d", &cod, &a, &b);
switch (cod)
{
case 0:
create(1, N, a, 1, b);
break;
case 1:
printf("%d ", query(1, N, a, b, 1));
break;
}
}
}