#include <bits/stdc++.h>


using namespace std;


int n, x_val, q;
int a[2000005];
int BIT[2000005];


int lowbit(int i) {
    return i & (-i);
}


void modify(int i, int val) {
    for (; i <= n; i += lowbit(i)) BIT[i] += val;
}


int query(int i) {
    int sum = 0;
    for (; i > 0; i -= lowbit(i)) sum += BIT[i];
    return sum;
}


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);


    cin >> n >> x_val;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        if (a[i] == x_val) modify(i, 1); // Đánh dấu nếu là x
    }


    cin >> q;
    while (q--) {
        int type;
        cin >> type;
        if (type == 1) {
            int l, r, k;
            cin >> l >> r >> k;
           
            int s_before = query(l - 1);
            int target = s_before + k;
           
            // Kiểm tra xem trong đoạn [1, r] có đủ target số x không
            if (query(r) < target) {
                cout << -1 << "\n";
            } else {
                // Chặt nhị phân tìm vị trí nhỏ nhất đạt được target
                int low = l, high = r, ans = -1;
                while (low <= high) {
                    int mid = low + (high - low) / 2;
                    if (query(mid) >= target) {
                        ans = mid;
                        high = mid - 1;
                    } else {
                        low = mid + 1;
                    }
                }
                cout << ans << "\n";
            }
        } else {
            int idx, v;
            cin >> idx >> v;
            if (a[idx] == x_val && v != x_val) modify(idx, -1);
            else if (a[idx] != x_val && v == x_val) modify(idx, 1);
            a[idx] = v;
        }
    }
    return 0;
}
