#include<fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,v[100002],h[300002];
void build(int nod,int x,int y)
{
int m=(x+y)/2;
if(x==y) h[nod]=v[x];
else
{
build(nod*2,x,m);
build(nod*2+1,m+1,y);
h[nod]=max(h[nod*2],h[nod*2+1]);
}
}
void change(int nod,int x,int y,int pos,int val)
{
int m=(x+y)/2;
if(x==y) h[nod]=val;
else
{
if(pos<=m) change(nod*2,x,m,pos,val);
else change(nod*2+1,m+1,y,pos,val);
h[nod]=max(h[nod*2],h[nod*2+1]);
}
}
int ask(int nod,int x,int y,int xi,int yi)
{
if(xi<=x&&yi>=y) return h[nod];
int m=(x+y)/2,maxi=0;
if(xi<=m)
{
maxi=max(ask(nod*2,x,m,xi,yi),maxi);
}
if(yi>m)
{
maxi=max(ask(nod*2+1,m+1,y,xi,yi),maxi);
}
return maxi;
}
void read()
{
f>>n>>m;
for(int i=1;i<=n;i++) f>>v[i];
build(1,1,n);
for(int i=1;i<=m;i++)
{
int ok,xi,yi;
f>>ok>>xi>>yi;
if(ok==0) g<<ask(1,1,n,xi,yi)<<"\n";
else change(1,1,n,xi,yi);
}
}
int main(){
read();
return 0;
}