#include <cstdio>
using namespace std;
#define MAX_N (1 << 15)
int T[MAX_N];
int S, N, M, Op;
void Query(int n, int a, int b, int st, int dr)
{
if(a >= st && b <= dr)
{
#ifdef DEBUG
printf("%d %d -> %d\n", a, b, T[n]);
#endif
S += T[n];
}
else
{
int m = (a + b) >> 1;
if(st <= m) Query(n<<1, a, m, st, dr);
if(dr > m) Query((n<<1)+1, m+1, b, st, dr);
}
}
void Update(int n, int a, int b, int x, int v)
{
if(a < b)
{
int m = (a + b) >> 1;
if(x <= m) Update(n<<1, a, m, x, v);
else Update((n<<1)+1, m+1, b, x, v);
T[n] = T[n<<1] + T[(n<<1)+1];
}
else
T[n] -= v;
}
int main()
{
freopen("datorii.in", "rt", stdin);
freopen("datorii.out", "wt", stdout);
int i, a, b;
for ( scanf("%d %d", &N, &M), i = 1; i <= N; ++i )
{
scanf("%d", &Op);
Update(1, 1, N, i, -Op);
}
for ( i = 1; i <= M; ++i )
{
scanf("%d %d %d", &Op, &a, &b);
if(Op == 0) // achit b din valoarea zilei a
Update(1, 1, N, a, b);
else // interogare: a, a+1, ..., b-1, b
{
S = 0;
#ifdef DEBUG
printf("%d %d:\n", a, b);
#endif
Query(1, 1, N, a, b);
printf("%d\n", S);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}