#include <iostream>
#include <fstream>
#define MAX 100001
using namespace std;
int n,m,ai[MAX],v[MAX],a,b,o;
void initializare(int poz,int st,int dr){
if(st==dr){
ai[poz]=v[st];
return;
}
int mij=(st+dr)/2;
initializare(poz*2,st,mij); initializare(poz*2+1,mij+1,dr);
ai[poz]=max(ai[poz*2],ai[poz*2+1]);
}
int query(int poz,int st,int dr){
if(dr<a||st>b)return 0;
if(st>=a&&dr<=b)return ai[poz];
if(st==dr)return v[poz];
int mij=(st+dr)/2;
//cout<<st<<" "<<dr<<" "<<max(query(poz*2,st,mij),query(poz*2+1,mij+1,dr))<<'\n';
return max(query(poz*2,st,mij),query(poz*2+1,mij+1,dr));
}
void update(int poz,int st,int dr){
if(st==dr){
ai[poz]=v[st];
return;
}
int mij=(st+dr)/2;
if(a<=mij)update(poz*2,st,mij);
else update(poz*2+1,mij+1,dr);
ai[poz]=max(ai[poz*2],ai[poz*2+1]);
}
int main()
{
ifstream f ("arbint.in");
ofstream g ("arbint.out");
f>>n>>m;
for(int i=1;i<=n;i++)f>>v[i];
initializare(1,1,n);
for(int i=1;i<=m;i++){
f>>o>>a>>b;
if(o==0)g<<query(1,1,n)<<'\n';
else {
v[a]=b;
update(1,1,n);
}
}
f.close ();
g.close ();
return 0;
}