#include <fstream>
#define m(left, right) left + (right - left) / 2;
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m, arb[60045], sol;
void build(int node, int left, int right) {
if(left == right) {
f >> arb[node];
}
else {
int middle = m(left, right);
build(2 * node, left, middle);
build(2 * node + 1, middle + 1, right);
arb[node] = arb[2 * node] + arb[2 * node + 1];
}
}
void query(int node, int left, int right, int a, int b) {
if(left == right) {
sol += arb[node];
}
else {
int middle = m(left, right);
if(a <= middle) {
query(2 * node, left, middle, a, b);
}
if(b > middle) {
query(2 * node + 1, middle + 1, right, a, b);
}
}
}
void update(int node, int left, int right, int a, int b) {
if(left == right) {
arb[node] -= b;
}
else {
int middle = m(left, right);
if(a <= middle) {
update(2 * node, left, middle, a, b);
}
if(a > middle) {
update(2 * node + 1, middle + 1, right, a, b);
}
arb[node] = arb[2 * node] + arb[2 * node + 1];
}
}
int main()
{
f >> n >> m;
build(1, 1, n);
while(m--) {
int c, x, y;
f >> c >> x >> y;
if(c == 1) {
sol = 0;
query(1, 1, n, x, y);
g << sol << '\n';
}
else {
update(1, 1, n, x, y);
}
}
return 0;
}