#include <fstream>
#define NMAX 15005
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, x, questions, type, a, b, answer;
int arbore[NMAX * 5];
void update(int node, int st, int dr, int poz, int val, int sign) {
if (st == dr) {
arbore[node] = arbore[node] + sign * val;
return;
}
int mid = (st + dr) / 2;
if (poz <= mid)
update(node * 2, st, mid, poz, val, sign);
else
update(node * 2 + 1, mid + 1, dr, poz, val, sign);
arbore[node] = arbore[node * 2] + arbore[node * 2 + 1];
}
void query(int node, int st, int dr, int start, int finish) {
if (start <= st && dr <= finish) {
answer = answer + arbore[node];
return ;
}
int mid = (st + dr) / 2;
if (start <= mid)
query(node * 2, st, mid, start, finish);
if (mid < finish)
query(node * 2 + 1, mid + 1, dr, start, finish);
}
int main()
{
f >> n >> questions;
for (int i = 1; i <= n; i++) {
f >> x;
update(1, 1, n, i, x, 1);
}
while (questions--) {
f >> type >> a >> b;
if (type == 0) {
update(1, 1, n, a, b, -1);
} else {
answer = 0;
query(1, 1, n, a, b);
g << answer << "\n";
}
}
return 0;
}