#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m,A[271000],p[100001],v[100001];
void build(int k,int a,int b){
if(a==b)
A[k]=v[a],p[a]=k;
else
{
int m=(a+b)/2;
build(k*2,a,m);
build((k*2)+1,m+1,b);
A[k]=max(A[k*2],A[(k*2)+1]);
}
}
int query(int k,int x,int y,int a,int b){
if (a<=x && y<=b)
return A[k];
else{
int m=(x+y)>>1,w=-1;
if (a<=m)
w=max(w,query(k<<1,x,m,a,b));
if (b>m)
w=max(w,query((k<<1)+1,m+1,y,a,b));
return w;
}
}
void update(int k){
A[k]=max(A[k*2],A[(k*2)+1]);
if (k!=1)
update(k/2);
}
int main(){
int a,b,i,t;
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>v[i];
build(1,1,n);
for(i=1;i<=m;i++){
fin>>t>>a>>b;
if(!t)
fout<<query(1,1,n,a,b)<<'\n';
else{
v[a]=b;
A[p[a]]=b;
update(p[a]/2);
}
}
fin.close();
fout.close();
return 0;
}