#include <iostream>
#include <fstream>
//http://www.infoarena.ro/problema/arbint
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m,x,pos,t,l,r,no;
int maxarb[400701];
inline void update (int nod,int st,int dr, int pos, int val)
{ if(st==dr)
{
maxarb[nod]=val;
return;
}
int med=(st+dr)/2;
if(pos<=med)update(2*nod,st,med,pos,val);
if(pos>med)update(2*nod+1,med+1,dr,pos,val);
maxarb[nod]=max(maxarb[nod<<1],maxarb[nod<<1|1]);
}
inline int query(int nod,int st,int dr, int a, int b)
{
if(a<=st&&dr<=b)
{ return maxarb[nod];
}
int ans=0;
int med=(st+dr)/2;
if(a<=med)ans=max(ans,query(nod*2,st,med,a,b));
if(b>med)ans=max(ans,query(nod*2+1,med+1,dr,a,b));
return ans;
}
int main()
{ int i,j,a,b,al;
in>>n>>m;
for(i=1;i<=n;i++)
{
in>>al;
x=al;
pos=i;
update(1,1,n,pos,x);
}
for(j=1;j<=m;j++)
{ in>>t>>a>>b;
if(t==0)
{out<<query(1,1,n,a,b)<<'\n';}
else {pos=a;x=b;
update(1,1,n,pos,x);}
}
return 0;
}