//#include <iostream>
#include <stdio.h>
#define nmax 100001
using namespace std;
FILE *f=fopen("arbint.in","r"),*g=fopen("arbint.out","w");
int a,b,n,arb[4*nmax],poz,val;
inline int maxi(int a,int b)
{
if(a<b)
return b;
return a;
}
int query(int nod, int st, int dr)
{int mijl,maxx=-1;
if(st>=a&&dr<=b)
return arb[nod];
mijl=(st+dr)/2;
if(a<=mijl)
maxx=maxi(maxx,query(nod*2,st,mijl));
if(b>mijl)
maxx=maxi(maxx,query(nod*2+1,mijl+1,dr));
return maxx;
}
void update(int nod, int st, int dr)
{
int mijl=(st+dr)/2;
if(st==dr)
arb[nod]=val;
else {
if(poz<=mijl)
update(nod*2,st,mijl);
else
update(nod*2+1,mijl+1,dr);
arb[nod]=maxi(arb[nod*2],arb[nod*2+1]);
}
}
int main()
{
int i,j,m,t,p=1,maxim;
fscanf(f,"%d %d",&n,&m);
while(p<n)
p*=2;
for(i=1;i<=n;i++)
{fscanf(f,"%d",&val);
poz=i;
update(1,1,p);
}
for(j=1;j<=m;j++)
{
fscanf(f,"%d %d %d",&t,&a,&b);
if(t==0)
fprintf(g,"%d\n",query(1,1,p));
else {
poz=a;
val=b;
update(1,1,p);
}
}
fclose(f);
fclose(g);
return 0;
}