#include <bits/stdc++.h>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout("arbint.out");
int m,n;
vector<int> ai;
void update(int ind, int val, int le=1,int ri=n, int node=0){
// static int once=1;
// if(once ) cout<<"\n"<<ind<<" "<<val<<"\n\n", once=0;
// cout<<le<<" "<<ri<<" "<<node<<"\n";
if(le==ri) {
// once=1;
ai[node]=val;
return ;
}
int mi=(le+ri)/2, nnode=node*2+1;
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){
// cout<<le<<" "<<ri<<"\n";
// cout<<a<<" "<<b<<"\n";
// cout<<"node "<<node<<" "<<ai[node]<<"\n\n";
if(a==le and b==ri) {
// cout<<"--";
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);
}
for(int i=1;i<=n;++i){
int x;
fin>>x;
// update(i,x);
}
for(int i=1;i<=m;++i){
int k, x,y;
fin>>k>>x>>y;
if(k==0){
// [a,b]
// cout<<x<<".."<<y<<"\n";
int se=search(x,y);
// fout<<se<<"\n";
// cout<<"\n___\n";
}
else {
// a[a]=b
update(x,y);
}
}
}