#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int a[100050],t[400200];
void build(int v, int l , int r ){
if(l == r){
t[v]=a[l];
}
else{
int d=v<<1;
int m=(l+r)>>1;
build(d, l , m);
build(d+1, m+1, r);
t[v]=max(t[d], t[d+1]);
}
}
void ud(int v, int l, int r, int p, int x){
if(l == r){
t[v]=x;
}
else{
int m=(l+r)>>1;
int d=v<<1;
if(p<=m){
ud(d, l, m, p, x);
}
else
ud(d+1, m+1, r, p , x);
t[v]=max(t[d],t[d+1]);
}
}
int mx(int v, int tl, int tr, int l, int r){
if(l > r)
return -1;
if(l == tl && r == tr )
return t[v];
int m=(tl + tr)>>1;
int d=v<<1;
return max( mx(d, tl , m , l , min(r,m)) , mx(d+1, m+1, tr, max(l, m+1), r));
}
int main(){
int n,m,i,j,x,y;
f>>n>>m;
for(i=1; i<=n; ++i)
f>>a[i];
build(1,0,n);
for(i=0; i<m; ++i){
f>>j>>x>>y;
if(j){
ud(1, 0 , n , x, y);
}
else
g<<mx(1,0,n, x, y)<<'\n';
}
return 0;
}