#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define NMAX 15100
#define arbmax 1 << 19
#define left(x) ((x) << 1) //stanga unui nod
#define right(x) ((x) << 1) + 1 //dreapta unui nod
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int arbint[arbmax],v[NMAX];
void creare(int nod, int left, int right)
{
if(left == right){
arbint[nod] = v[left];
}else{
int mid = (right+left) >> 1;
creare(left(nod), left, mid);
creare(right(nod), mid + 1, right);
arbint[nod] = arbint[left(nod)] + arbint[right(nod)];
}
}
void update(int nod, int left, int right, int poz, int val)
{
if( left == right){
arbint[nod] -= val;
return;
}
int mid = (right + left) >> 1;
if(poz <= mid){
update(left(nod), left, mid, poz, val);
}
else{
update(right(nod), mid + 1, right, poz, val);
}
arbint[nod] -= val;
}
int query(int nod, int left, int right, int st_q, int dr_q)
{
if(st_q <= left && right <= dr_q)
return arbint[nod];
int mid = ( left + right ) >> 1;
int t1 = 0, t2 = 0;
if (st_q <= mid)
t1 = query(left(nod), left , mid, st_q, dr_q);
if (dr_q > mid)
t2 = query(right(nod), mid + 1, right , st_q, dr_q);
return t1+t2;
}
int main() {
int n,i , m, x, y, t;
fin >> n >> m;
for (i = 1; i <= n; ++i) {
fin>>v[i];
}
creare(1,1,n);
for(i = 1 ; i <= m ; i++) {
fin >> t >> x >> y;
if (t == 0)
update(1,1,n,x,y);
else{
fout<<query(1, 1, n, x, y)<< "\n";
}
}
fin.close();
fout.close();
return 0;
}