#include <fstream>
#include <array>
template<int len>
class AINT {
std::array<int, (len << 2) + 1> t;
private:
inline void _update(int p, int st, int dr, int n, int poz, int val) {
if (st == dr) {
t[p] += val;
return;
}
int m = (st + dr) / 2;
if (poz <= m) {
_update(2 * p, st, m, n, poz, val);
} else {
_update(2 * p + 1, m + 1, dr, n, poz, val);
}
t[p] = t[2 * p] + t[2 * p + 1];
}
inline int _query(int p, int st, int dr, int n, int a, int b) {
if (a <= st && b >= dr) {
return t[p];
}
int m = (st + dr) / 2, maxst = 0, maxdr = 0;
if (a <= m) {
maxst = _query(2 * p, st, m, n, a, b);
}
if (b > m) {
maxdr = _query(2 * p + 1, m + 1, dr, n, a, b);
}
return maxst + maxdr;
}
public:
void update(int n, int poz, int val) {
_update(1, 1, n, n, poz, val);
}
int query(int n, int a, int b) {
return _query(1, 1, n, n, a, b);
}
};
AINT<15000> aint;
int main() {
std::ifstream fin("datorii.in");
std::ofstream fout("datorii.out");
int n, m;
fin >> n >> m;
for (int i = 1; i <= n; i++) {
int x;
fin >> x;
aint.update(n, i, x);
}
for (; m > 0; m--) {
int c, a, b;
fin >> c >> a >> b;
if (c == 0) {
aint.update(n, a, -b);
} else {
fout << aint.query(n, a, b) << '\n';
}
}
return 0;
}