#include<iostream>
#include<fstream>
using namespace std;
long maxx[40067],A;
void update(int k,int s,int d,int a)
{if(s==d)
maxx[k]=A;
else
{ int mij=(s+d)/2;
if(a<=mij)
update(k*2,s,mij,a);
else
update(k*2+1,mij+1,d,a);
if(maxx[k*2+1]>maxx[k*2])
maxx[k]=maxx[k*2+1];
else
maxx[k]=maxx[k*2];}}
int maxim(int k,int s,int d,int st,int dr)
{if(st<=s&&d<=dr)
return maxx[k];
int mij=(s+d)/2,sol1=-1,sol2=-1;
if(st<=mij)
sol1=maxim(k*2,s,mij,st,dr);
if(dr>mij)
sol2=maxim(k*2+1,mij+1,d,st,dr);
if(sol1>=sol2)
return sol1;
return sol2;}
int main()
{ifstream f("arbint.in");
ofstream h("arbint.out");
long n,m,i,p,X,Y,Z;
f>>n>>m;
for(i=1;i<=n;i++)
{f>>A;
update(1,1,n,i);}
for(i=1;i<=m;i++)
{f>>X>>Y>>Z;
if(X==0)
h<<maxim(1,1,n,Y,Z)<<'\n';
else
{A=Z;
update(1,1,n,Y);}}
return 0;}