#include <iostream>
#include <fstream>
using namespace std;
long nulla(long a[100000],long csucs, long c, long d, int bal, int jobb)
{
if (bal>=c && jobb<=d)
return a[csucs];
else
{
int kozep=(bal+jobb)/2;
long 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(long a[100000], long csucs, int bal, int jobb, long c, long 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()
{
(void) freopen("arbint.in","r",stdin);
(void) freopen("arbint.out","w",stdout);
long N,M,i=1;
long a[400100]={0},x;
cin>>N>>M;
while(i<=N)
{
cin>>x;
egy(a,1,1,N,i,x);
i++;
}
i=1;
int b;
long long c,d; //b- 1 vagy 0
while(i<=M)
{
cin>>b>>c>>d;
if(b==0)
{cout<<nulla(a,1,c,d,1,N)<<'\n';}
else egy(a,1,1,N,c,d);
i++;
}
fclose(stdin);
fclose(stdout);
return 0;
}