#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int N, M, ARB[400100], A, B, rs;
void update(int left, int right, int nod, int val, int poz){
if(left == right) ARB[nod] = val;
else{
int pivot = (left + right)/2;
if(poz <= pivot) update(left, pivot, 2*nod, val, poz);
else update(pivot+1, right, 2*nod + 1, val ,poz);
ARB[nod] =max(ARB[2*nod], ARB[2*nod+1]);
}
}
void query(int left, int right, int nod, int x, int y){
if(left >= x && right <= y) rs = max(rs, ARB[nod]);
else {
int pivot = (left+right)/2;
if(x <= pivot) query(left, pivot, 2*nod, x, y);
if(y > pivot) query(pivot+1, right, 2*nod + 1, x, y);
}
}
int main(){
cin >> N >> M;
for(int i = 1; i <= N; i++){
int x;
cin >> x;
update(1,N,1,x,i);
}
for(int i = 1; i <= M; i++){
int X;
cin >> X >> A >> B;
if(X == 0){
rs = -2;
query(1, N, 1, A, B);
cout << rs << '\n';
}
else update(1, N, 1, B, A);
}
return 0;
}