#include <cstdio>
#define NMAX 60066
int N, M, arb[NMAX], sum;
void update(int node, int left, int right, const int &pos, const int &val);
//void init(int node, int left, int right, const int &pos, const int &val);
void query(int node, int left, int right, const int &A, const int &B);
int main()
{
int tmp, type, val;
freopen("datorii.in", "r", stdin);
freopen("datorii.out","w",stdout);
scanf("%d %d", &N, &M);
for (int i = 1 ;i <= N ; ++i)
{
scanf("%d", &tmp);
tmp = -tmp;
update(1, 1, N, i, tmp);
}
for (;M;--M)
{
scanf("%d %d %d", &type, &tmp, &val);
if (type)
{
sum = 0;
query(1, 1, N, tmp, val);
printf("%d\n", sum);
}
else
update(1, 1, N, tmp, val);
}
return 0;
}
void update(int node, int left, int right, const int &pos, const int &val)
{
if (left >= right)
{
arb[node] -= val;
return;
}
int mid = (left + right) >> 1;
if (pos <= mid) update(node << 1, left, mid, pos, val);
else update((node << 1) + 1, mid + 1, right, pos, val);
arb[node] -= val;
}
void query(int node, int left, int right, const int &A, const int &B)
{
if (left >= A && right <= B)
{
sum += arb[node];
return;
}
int mid = (left + right) >> 1;
if (A <= mid) query(node << 1, left, mid, A, B);
if (B > mid) query((node << 1) + 1, mid + 1, right, A, B);
}