#include <bits/stdc++.h>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout("arbint.out");
int m,n;
vector<int> ai;
const int NMAX=1e5+1;
// int ai[NMAX*4];
void update(int ind, int val, int le=1,int ri=n, int node=0){
if(le==ri) {
// once
ai[node]=val;
return ;
}
int mi=(le+ri)/2, nnode=node*2+1; //next node
if(ind<=mi)
update(ind,val, le, mi, nnode);
else
update(ind,val, mi+1,ri, nnode+1);
ai[node]=max(ai[nnode],ai[nnode+1]);
}
int search(int a, int b, int le=1, int ri=n, int node=0){
if(a==le and b==ri) {
// cout<<ai[node]<<" ";
return ai[node];
}
int mi=(le+ri)/2, ans=-1;
node=node*2+1;
if(a<=mi) ans=max(ans,search(a,min(b,mi), le,mi, node) );
if(b>mi) ans=max(ans,search(max(a,mi+1),b, mi+1,ri, node+1) );
return ans;
}
int main() {
fin>>n>>m;
{
// int p=0;
// for(int i=1; p<n; p+=i,i<<=1)
// ;
// ai.resize(p*2,0);
ai.resize(NMAX*4,0);
}
for(int i=1;i<=n;++i){
int x;
fin>>x;
update(i,x);
}
for(int i=1;i<=m;++i){
int t, x,y;
fin>>t>>x>>y;
if(t==0){
// max [x,y]
// cout<<x<<".."<<y<<"\n";
fout<<search(x,y)<<"\n";
}
else {
// [a]=b
update(x,y);
}
}
}