#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("datorii.in");
ofstream cout ("datorii.out");
const int MAX = 15000;
vector<int> tree(4*MAX, 0);
void update(int node, int st, int dr, const int poz, const int val)
{
if(st == dr){
tree[node] += val;
return;
}
int mid = (st + dr) / 2;
if(poz <= mid)
update(node * 2, st, mid, poz, val);
else
update(node * 2 + 1, mid + 1, dr, poz, val);
tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
int query(int node, int st, int dr, const int Qst, const int Qdr)
{
if(Qst <= st && dr <= Qdr)
return tree[node];
int mid = (st + dr) / 2;
int suma_neachitata = 0;
if(Qst <= mid)
suma_neachitata += query(node * 2, st, mid, Qst, Qdr);
if(Qdr > mid)
suma_neachitata += query(node * 2 + 1, mid + 1, dr, Qst, Qdr);
return suma_neachitata;
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; ++ i) {
int val_neachitata;
cin >> val_neachitata;
update(1, 1, n, i, val_neachitata);
}
while (m --) {
int tip;
cin >> tip;
if (tip == 1) {
int st, dr;
cin >> st >> dr;
cout << query(1, 1, n, st, dr) << '\n';
}
else {
int zi, val_suma;
cin >> zi >> val_suma ;
update(1, 1, n, zi, -val_suma);
}
}
return 0;
}