#include <bits/stdc++.h>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
const int N_MAX = 15e3 + 5;
int arb[4 * N_MAX] , n , m , a[N_MAX];
inline int left_son (int node){
return 2 * node;
}
inline int right_son (int node){
return 2 * node + 1;
}
void build(int st , int dr , int node){
if (st == dr){
arb[node] = a[st];
return;
}
int mij = (st + dr) / 2;
build(st , mij , left_son(node));
build(mij + 1 , dr , right_son(node));
arb[node] = arb[left_son(node)] + arb[right_son(node)];
}
void update (int st ,int dr , int poz , int val , int node){
if (st > poz || dr < poz){
return;
}
if (st == dr){
arb[node] -= val;
return;
}
int mij = (st + dr) / 2;
update(st , mij , poz , val , left_son(node));
update(mij + 1 , dr , poz , val , right_son(node));
arb[node] = arb[left_son(node)] + arb[right_son(node)];
}
int query (int st , int dr , int Qst , int Qdr , int node){
if (st > Qdr || dr < Qst){
return 0;
}
if (Qst <= st && dr <= Qdr){
return arb[node];
}
int mij = (st + dr) / 2;
return query(st , mij , Qst , Qdr , left_son(node)) + query(mij + 1 , dr , Qst , Qdr , right_son(node));
}
int main(){
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fin >> n >> m;
for (int i=1; i<=n; i++){
fin >> a[i];
}
build(1 , n , 1);
while (m--){
int op , l , r; fin >> op >> l >> r;
if (op == 0){
update(1 , n , l , r , 1);
}
else{
fout << query(1 , n , l , r , 1) << '\n';
}
}
}