#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define F first
#define S second
#define all(v) v.begin(),v.end()
#define  P pair
#define V vector
const long long MOD = 1000000007; // 1e9 + 7

long long mod(long long a, long long b) {
    return (a % b + b) % b;
}
void file(){
    freopen("input.txt.txt","r",stdin);
    freopen("output.txt.txt","w",stdout);
}
int maxer(int a,int b,int c){
    return max(a,max(b,c));
}
void setio(string s) {
    freopen((s + ".in").c_str(), "r", stdin);
    freopen((s + ".out").c_str(), "w", stdout);
}

bool issorted(int n,int A[]){
    for(int i=0;i<n-1;i++){
        if(A[i+1]<A[i])
            return false;
    }
    return true;
}
void dfs(int x,vector<int>graph[],vector<bool>&visited,vector<int>&vp) {
    if (visited[x])return;
    visited[x] = true;
    vp.pb(x);
    for (auto u: graph[x])
        dfs(u, graph, visited, vp);
}
vector<ll>divisors(ll n){
    vector<ll>ans;
    for(ll i=1;i*i<=n;i++){
        if(i*i==n){
            ans.pb(i);
            continue;
        }
        if(n%i==0){
            ans.pb(i);
            ans.pb(n/i);
        }
    }
    return ans;
}
bool check(ll m,const ll A[],ll k){
    return k>=A[m];
}
struct segtree {
    int size;
    V<int> maxer;

    void init(int n) {
        size = 1;
        while (size < n)size *= 2;
        maxer.assign(2 * size, INT_MIN);
    }

    void set(int i, int v) {
        i += size;
        maxer[i] = v;
        for (i /= 2; i >= 1; i /= 2)
            maxer[i] = max(maxer[2 * i], maxer[2 * i + 1]);
    }

    int result(int x) {
        int search = 1;
        while (search < size) {
            if (maxer[2 * search] >= x) {
                search = 2 * search;
            } else if (maxer[2 * search + 1] >= x) {
                search = 2 * search + 1;
            } else
                return -1;
        }
        return search - size;
    }
};
void solve() {
    int n, q;
    cin >> n >> q;
    segtree st;
    st.init(n);
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        st.set(i, x);
    }
    while (q--) {
        int t;
        cin >> t;
        if (t == 1) {
            int i, v;
            cin >> i >> v;
            st.set(i, v);
        } else {
            int x;
            cin >> x;
            cout << st.result(x) << endl;
        }
    }
}


int main(){
    //file();
    solve();
    return 0;
}