#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 2e9;
const ll LINF = 1e18;
const int N = 1e5 + 5;
int n, q;
int a[N];
multiset<int> seg[4 * N]; // seg[id] = multiset chứa các phần tử thuộc đoạn [l, r] mà nút id quản lí
void build(int id, int l, int r) { // O(nlog^2(n))
if (l == r) {
seg[id].insert(a[l]);
return;
}
int mid = (l + r) >> 1;
build(id * 2, l, mid);
build(id * 2 + 1, mid + 1, r);
seg[id] = seg[id * 2];
for (int x : seg[id * 2 + 1]) seg[id].insert(x);
}
void update(int id, int l, int r, int pos, int val) { // O(log^2(n))
if (l > pos || r < pos) return;
seg[id].erase(seg[id].find(a[pos]));
seg[id].insert(val);
if (l == r) return;
int mid = (l + r) >> 1;
update(id * 2, l, mid, pos, val);
update(id * 2 + 1, mid + 1, r, pos, val);
}
// Tìm số nhỏ nhất >= k trong đoạn [u, v]
int get(int id, int l, int r, int u, int v, int k) { // O(log^2(n))
if (l > v || r < u) return INF;
if (u <= l && r <= v) {
auto it = seg[id].lower_bound(k);
if (it != seg[id].end()) return (*it);
return INF;
}
int mid = (l + r) >> 1;
return min(get(id * 2, l, mid, u, v, k), get(id * 2 + 1, mid + 1, r, u, v, k));
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
build(1, 1, n);
while (q--) {
int type; cin >> type;
if (type == 1) {
int i, v;
cin >> i >> v;
update(1, 1, n, i, v);
a[i] = v;
}
else {
int l, r, k;
cin >> l >> r >> k;
int ans = get(1, 1, n, l, r, k);
if (ans == INF) ans = -1;
cout << ans << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMmU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDFlNSArIDU7ICAKCmludCBuLCBxOyAgCmludCBhW05dOyAgCgptdWx0aXNldDxpbnQ+IHNlZ1s0ICogTl07IC8vIHNlZ1tpZF0gPSBtdWx0aXNldCBjaOG7qWEgY8OhYyBwaOG6p24gdOG7rSB0aHXhu5ljIMSRb+G6oW4gW2wsIHJdIG3DoCBuw7p0IGlkIHF14bqjbiBsw60KCnZvaWQgYnVpbGQoaW50IGlkLCBpbnQgbCwgaW50IHIpIHsgLy8gTyhubG9nXjIobikpCglpZiAobCA9PSByKSB7CgkJc2VnW2lkXS5pbnNlcnQoYVtsXSk7IAoJCXJldHVybjsgCgl9CglpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCWJ1aWxkKGlkICogMiwgbCwgbWlkKTsgCglidWlsZChpZCAqIDIgKyAxLCBtaWQgKyAxLCByKTsgCglzZWdbaWRdID0gc2VnW2lkICogMl07IAoJZm9yIChpbnQgeCA6IHNlZ1tpZCAqIDIgKyAxXSkgc2VnW2lkXS5pbnNlcnQoeCk7IAp9Cgp2b2lkIHVwZGF0ZShpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHBvcywgaW50IHZhbCkgeyAvLyBPKGxvZ14yKG4pKQoJaWYgKGwgPiBwb3MgfHwgciA8IHBvcykgcmV0dXJuOyAKCglzZWdbaWRdLmVyYXNlKHNlZ1tpZF0uZmluZChhW3Bvc10pKTsgCglzZWdbaWRdLmluc2VydCh2YWwpOyAKCglpZiAobCA9PSByKSByZXR1cm47ICAKCglpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCXVwZGF0ZShpZCAqIDIsIGwsIG1pZCwgcG9zLCB2YWwpOyAKCXVwZGF0ZShpZCAqIDIgKyAxLCBtaWQgKyAxLCByLCBwb3MsIHZhbCk7IAp9CgovLyBUw6xtIHPhu5Egbmjhu48gbmjhuqV0ID49IGsgdHJvbmcgxJFv4bqhbiBbdSwgdl0KaW50IGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2LCBpbnQgaykgeyAvLyBPKGxvZ14yKG4pKQoJaWYgKGwgPiB2IHx8IHIgPCB1KSByZXR1cm4gSU5GOyAKCglpZiAodSA8PSBsICYmIHIgPD0gdikgewoJCWF1dG8gaXQgPSBzZWdbaWRdLmxvd2VyX2JvdW5kKGspOyAgIAoJCWlmIChpdCAhPSBzZWdbaWRdLmVuZCgpKSByZXR1cm4gKCppdCk7IAoJCXJldHVybiBJTkY7IAoJfQoKCWludCBtaWQgPSAobCArIHIpID4+IDE7IAoJcmV0dXJuIG1pbihnZXQoaWQgKiAyLCBsLCBtaWQsIHUsIHYsIGspLCBnZXQoaWQgKiAyICsgMSwgbWlkICsgMSwgciwgdSwgdiwgaykpOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgIAkKCWNpbiA+PiBuID4+IHE7IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gYVtpXTsgIAoKCWJ1aWxkKDEsIDEsIG4pOyAgIAoKCXdoaWxlIChxLS0pIHsKCQlpbnQgdHlwZTsgY2luID4+IHR5cGU7ICAKCgkJaWYgKHR5cGUgPT0gMSkgewoJCQlpbnQgaSwgdjsgCgkJCWNpbiA+PiBpID4+IHY7IAoJCQl1cGRhdGUoMSwgMSwgbiwgaSwgdik7IAoJCQlhW2ldID0gdjsgCgkJfQoJCWVsc2UgewoJCQlpbnQgbCwgciwgazsgCgkJCWNpbiA+PiBsID4+IHIgPj4gazsgIAoJCQlpbnQgYW5zID0gZ2V0KDEsIDEsIG4sIGwsIHIsIGspOyAgCgkJCWlmIChhbnMgPT0gSU5GKSBhbnMgPSAtMTsgIAoJCQljb3V0IDw8IGFucyA8PCAnXG4nOyAKCQl9Cgl9Cn0K