#include <iostream>
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int n, m;
int arbore[400000];
bool ok ;
void actualizare(int pozNod, int stInter, int drInter, int poz, int val){
if(stInter == drInter){
if(ok == false)
arbore[pozNod] = val;
else
arbore[pozNod] -= val;
return ;
}
int mijloc = (stInter + drInter) / 2;
if(poz <= mijloc)
actualizare(pozNod * 2, stInter, mijloc, poz, val);
else
actualizare(pozNod * 2 + 1, mijloc + 1, drInter, poz, val);//ca esti in dr
arbore[pozNod] = arbore[2 * pozNod] + arbore[2 * pozNod + 1];
}
int raspuns = 0;
void intervale(int pozNod, int stInter, int drInter, int a, int b){
if(a <= stInter && drInter <= b){
raspuns = raspuns + arbore[pozNod];
}
else{
int mijloc = ( stInter + drInter ) / 2;
if(a <= mijloc)//extremele
intervale(pozNod * 2, stInter, mijloc, a, b);
if(b > mijloc)
intervale(pozNod * 2 + 1, mijloc + 1, drInter, a, b);
}
}
void citire(){
in >> n >> m;
ok = false;
for(int i = 1; i<= n; i++){
int temp;
in >> temp;
actualizare(1, 1, n, i, temp);
//pun in arbore care are in nodul 1, intervalul de la 1 la n , pe pozitia i, temp
}
ok = true;
for(int i = 1; i <= m; i++){
int t, a, b;
in >> t >> a >> b;
if(t == 0){
actualizare(1, 1, n, a, b);
}
else{
raspuns = 0;
intervale(1, 1, n, a, b);
out << raspuns << '\n';
}
}
}
int main(){
citire();
return 0;
}