#include<bits/stdc++.h>
#define nmax 100005
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m,arb[nmax*4];
void update(int st, int dr, int poz, int pz, int val){
if(st>pz || dr<pz) return;
if(st == dr){
arb[poz] = val;
return;
}
int mid = (st+dr)/2;
update(st,mid,poz*2,pz,val);
update(mid+1,dr,poz*2+1,pz,val);
arb[poz]=max(arb[poz*2],arb[poz*2+1]);
}
int fnd(int st, int dr, int poz, int a, int b){
if(st>b || dr<a) return 0;
if(st>=a && dr<=b) return arb[poz];
int mid = (st+dr)/2;
return max(fnd(st,mid,poz*2,a,b),fnd(mid+1,dr,poz*2+1,a,b));
}
int main()
{
in >> n >> m;
for(int i=1; i<=n; i++){
int x;
in >> x;
update(1,n,1,i,x);
}
for(int i=1; i<=m; i++){
int c,a,b;
in >> c >> a >> b;
if(c){
update(1,n,1,a,b);
}
else{
out << fnd(1,n,1,a,b) << '\n';
}
}
}