#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m, op;
vector<int> v;
vector<long long> s;
void mt(int i, int p, int q){
if(p == q){
s[i] = v[p];
}else{
int mij = (p + q) / 2;
mt(i * 2, p, mij);
mt(i * 2 + 1, mij + 1, q);
s[i] = s[i * 2] + s[i * 2 + 1];
}
}
long long suma(int i, int p, int q, int x, int y){
if(x > q || y < p){
return 0;
}else if(x <= p && q <= y){
return s[i];
}else{
int mij = (p + q) / 2;
long long a = suma(i * 2, p, mij, x, y);
long long b = suma(i * 2 + 1, mij + 1, q, x, y);
return a + b;
}
}
void update(int i, int p, int q, int x){
if(p == q && q == x){
s[i] = v[x];
}else{
int mij = (p + q) / 2;
if(x <= mij){
update(i * 2, p, mij, x);
}else{
update(i * 2 + 1, mij + 1, q, x);
}
s[i] = s[i * 2] + s[i * 2 + 1];
}
}
int main()
{
int i, left, right, mid;
bool eok = 0;
long long x, y, rez;
fin >> n >> m;
v.resize(n + 1);
s.resize(4 * n + 4);
for(i = 1; i <= n; ++i){
fin >> v[i];
}
mt(1, 1, n);
for(i = 1; i <= m; ++i){
fin >> op;
if(op == 0){
fin >> x >> y;
v[x] += y;
update(1, 1, n, x);
}else if(op == 1){
fin >> x >> y;
cout << suma(1, 1, n, x, y) << endl;
}else{
eok = 0;
fin >> x;
left = 1, right = n;
while(left <= right){
mid = (left + right) / 2;
rez = suma(1, 1, n, 1, mid);
if(rez < x){
left = mid + 1;
}else if(rez > x){
right = mid - 1;
}else{
eok = 1;
cout << mid << endl;
break;
}
}
if(eok == 0) cout << -1 << endl;
}
}
return 0;
}