#include <fstream>
#include <iostream>
std::ifstream fin("aib.in");
std::ofstream fout("aib.out");
int n, m;
int aib[100005];
int query(int p) {
int answer(0);
while (1 <= p) {
answer += aib[p];
p -= (p & (-p));
}
return answer;
}
void update(int p, int value) {
while (p <= n) {
aib[p] += value;
p += (p & (-p));
}
}
int main() {
int q, x, y;
fin >> n >> m;
for (int i = 1; i <= n; i++) {
fin >> x;
update(i, x);
}
for (int i = 1; i <= m; i++) {
fin >> q;
if (q == 0) {
fin >> x >> y;
update(x, y);
}
else if (q == 1) {
fin >> x >> y;
fout << query(y) - query(x - 1) << "\n";
}
else {
fin >> x;
int l(1), r(n), m, k(-1);
while (l <= r) {
m = (l + r) / 2;
int sum = query(m);
if (sum >= x) {
r = m - 1;
if (sum == x) {
k = m;
}
}
else {
l = m + 1;
}
}
fout << k << "\n";
}
}
fout.close();
}