#include <fstream>
#include <cmath>
#define NM 100009
#define INFINIT -4
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int i,j,n,m,t,a,b,frz;
int v[NM*4],x[NM];
int filaib( int p,int st,int dr ){
int m,lch,rch;
if(st==dr) {
v[p]=x[st];
return v[p];
}
m=(st+dr)/2; lch=2*p; rch=2*p+1;
v[p]=max(filaib(lch,st,m),filaib(rch,m+1,dr));
return v[p];
}
int cautaib( int l,int r,int p,int st,int dr ){
int m,lch,rch;
if(dr<l||r<st) return INFINIT;
if(l<=st&&dr<=r) return v[p];
m=(st+dr)/2; lch=2*p; rch=2*p+1;
return max(cautaib(l,r,lch,st,m),cautaib(l,r,rch,m+1,dr));
}
int actualaib( int val,int pval,int p,int st, int dr ){
int m,lch,rch;
if(st==dr){
v[p]=val;
return val;
}
m=(st+dr)/2; lch=2*p; rch=2*p+1;
if(st<=pval&&pval<=m) actualaib(val,pval,lch,st,m);
else actualaib(val,pval,rch,m+1,dr);
v[p]=max(v[lch],v[rch]);
}
int main()
{
f>>n>>m;
for(i=1;i<=n;i++) f>>x[i];
// frz=ceil(log2(n));
// frz=(2*(1<<frz))-1;
filaib(1,1,n);
for(i=1;i<=m;i++){
f>>t>>a>>b;
if(t==0) g<<cautaib(a,b,1,1,n)<<'\n';
else actualaib(b,a,1,1,n);
}
return 0;
}