#include <iostream>
#include <fstream>
using namespace std;
ifstream f("abrint.in");
ofstream g("arbint.out");
int nulla(int a[400100],int csucs, int c, int d, int bal, int jobb)
{
if (bal>d || jobb<c)
return 0;
else if (bal>=c && jobb<=d)
return a[csucs];
else
{
int kozep=(bal+jobb)/2;
int max1=-1,max2=-1;
if(c<=kozep)
max1=nulla(a,csucs*2,c,d,bal,kozep);
if(d>kozep)
max2=nulla(a,csucs*2+1,c,d,kozep+1,jobb);
if(max1>max2)
return max1;
else return max2;
}
}
void egy(int a[400100], int csucs, int bal, int jobb, int c, int d)
{
if(bal==jobb)
{
a[csucs]=d;
return;
}
int kozep=(bal+jobb)/2;
if(c<=kozep)
egy(a,csucs*2,bal,kozep,c,d);
else egy(a,csucs*2+1,kozep+1,jobb,c,d);
if(a[csucs*2+1]>a[csucs*2])
a[csucs]=a[csucs*2+1];
else a[csucs]=a[csucs*2];
}
int main()
{
int N,M,i=1;
int a[400100]={0},x;
f>>N>>M;
while(i<=N)
{
f>>x;
egy(a,1,1,N,i,x);
i++;
}
i=1;
int b;
int c,d; //b- 1 vagy 0
while(i<=M)
{
f>>b>>c>>d;
if(b==0)
{g<<nulla(a,1,c,d,1,N)<<endl;}
else egy(a,1,1,N,c,d);
i++;
}
return 0;
}