#include<fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int t[400005];
void interogare(int a, int b, int p, int poz, int val){
if(a==b)
t[p]=val;
else{
int mid=(a+b)/2;
if(poz<=mid)
interogare(a, mid, p*2,poz,val);
else
interogare(mid+1, b, p*2+1, poz, val);
t[p]=max(t[p*2], t[p*2+1]);
}
}
int query (int a, int b, int p, int st, int dr){
int r1=0, r2=0;
if(st<=a && dr>=b)
return t[p];
int mid=(a+b)/2;
if(st<=mid)
r1=query(a, mid, p*2, st, dr);
if(mid<dr)
r2=query(mid+1, b, p*2+1, st, dr);
return max(r1, r2);
}
int main(){
int n, m, a, b, c;
cin>>n>>m;
for(int i =1; i<=n; i++){
cin>>a;
interogare(1, n, 1, i, a);
}
for(int i=1; i<=m; i++){
cin>>a>>b>>c;
if(a==1)
interogare(1, n, 1, b, c);
else
cout<<query(1, n, 1, b, c)<<'\n';
}
return 0;
}