#include <bits/stdc++.h>
using namespace std;
int n, m, a[15005];
int A[100005];
inline void BuildArb(int st, int dr, int nod){
if(st == dr){A[nod] = a[st]; return ;}
int mij = (st + dr) / 2;
BuildArb(st, mij, nod * 2);
BuildArb(mij + 1, dr, nod * 2 + 1);
A[nod] = A[nod * 2] + A[nod * 2 + 1];
}
inline void update(int st, int dr, int nod, int z, int v){
if(st == dr){
A[nod] -= v;
return ;
}
int mij = (st + dr) / 2;
if(z <= mij) update(st, mij, nod * 2, z, v);
else update(mij + 1, dr, nod * 2 + 1, z, v);
A[nod] = A[nod * 2] + A[nod * 2 + 1];
}
inline int query(int st, int dr, int nod, int x, int y){
if(x <= st && dr <= y) return A[nod];
int mij = (st + dr) / 2, ans = 0;
if(x <= mij) ans += query(st, mij, nod * 2, x, y);
if(mij + 1 <= y) ans += query(mij + 1, dr, nod * 2 + 1, x, y);
return ans;
}
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]);
BuildArb(1, n, 1);
int x, y, ok;
for(int i = 1; i <= m ; ++i){
scanf("%d%d%d", &ok, &x, &y);
if(ok == 0) update(1, n, 1, x, y);
else printf("%d\n", query(1, n, 1, x, y));
}
return 0;
}