#include <bits/stdc++.h>
using namespace std;
int n,m,A[262144],bred,poz;
void update(int nod, int st, int dr, int a, int b){
if (st==dr){
A[nod]=a;
return;
}
int mid=(st+dr)/2;
if (b<=mid) update(2*nod,st,mid,a,b);
else update(2*nod+1,mid+1,dr,a,b);
A[nod]=max(A[2*nod],A[2*nod+1]);
}
int query(int nod, int st, int dr, int a, int b){
if (a<=st && b>=dr) return A[nod];
int mid=(st+dr)/2,max1=0,max2=0;
if (a<=mid) max1=query(2*nod,st,mid,a,b);
if (b>mid) max2=query(2*nod+1,mid+1,dr,a,b);
return max(max1,max2);
}
int main(){
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
cin>>n>>m;
for (int i=1; i<=n; i++){
cin>>bred;
poz=i;
update(1,1,n,bred,poz);
}
for (int i=1; i<=m; i++){
int o,a,b;
cin>>o>>a>>b;
if (o==0) cout<<query(1,1,n,a,b)<<"\n";
else{
update(1,1,n,b,a);
}
}
return 0;
}