#include <fstream>
#define int long long
using namespace std;
int aint[4 * 10000 + 5], sum = 0;
int v[15005];
struct interval {
int st, dr;
};
void update(int nod, int poz, int val, interval x) {
if(x.st == x.dr) {
aint[nod] -= val;
return;
}
int mij = (x.st + x.dr) / 2;
if(poz <= mij)
update(nod * 2, poz, val, {x.st, mij});
if(poz > mij)
update(nod * 2 + 1, poz, val, {mij + 1, x.dr});
aint[nod] = aint[nod * 2] + aint[nod * 2 + 1];
return;
}
void query(int nod, int st, int dr, interval x) {
if(x.st == st && x.dr == dr) {
sum += aint[nod];
return;
}
int mij = (x.st + x.dr) / 2;
if(st <= mij)
query(nod * 2, st, min(mij, dr), {x.st, mij});
if(dr >= mij + 1)
query(nod * 2 + 1, max(mij + 1, st), dr, {mij + 1, x.dr});
return;
}
signed main() {
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int n, m;
cin>>n>>m;
for(int i = 1; i <= n; i++) {
cin>>v[i];
update(1, i, -v[i], {1, n});
}
for(int i = 1; i <= m; i++) {
int cer, a, b;
cin>>cer>>a>>b;
if(cer == 0)
update(1, a, b, {1, n});
if(cer == 1) {
sum = 0;
query(1, a, b, {1, n});
cout<<sum<<'\n';
}
}
return 0;
}