#include <iostream>
#include <cstring>
using namespace std;
#define NM 100005
int A[NM], ARB[3*NM], ans, N, M, a, b;
void query (int nod, int st, int dr)
{
if (a <= st && dr <= b)
{
ans += ARB[nod];
return ;
}
int mij = (st + dr)/2;
if (a <= mij) query (2*nod, st, mij);
if (b >= mij + 1) query (2*nod + 1, mij + 1, dr);
}
void update (int nod, int st, int dr)
{
if (st == dr)
{
ARB[nod] += b;
return ;
}
int mij = (st + dr)/2;
if (a <= mij) update(2*nod, st, mij);
else update(2*nod + 1, mij + 1, dr);
ARB[nod] = ARB[2*nod] + ARB[2*nod+1];
}
int main()
{
freopen ("datorii.in", "r", stdin);
freopen ("datorii.out", "w", stdout);
scanf ("%d %d", &N, &M);
for (int i = 1; i <= N; ++i)
{
scanf ("%d", &A[i]);
a = i, b = A[i];
update(1, 1, N);
}
for (int i = 1; i <= M; ++i)
{
int op, t, v;
scanf ("%d %d %d", &op, &t, &v);
a = t, b = v;
if (!op)
{
b = -b;
update (1, 1, N);
}
else
{
ans = 0;
query (1, 1, N);
printf ("%d\n", ans);
}
}
return 0;
}