#include <cstdio>
#include <algorithm>
#define LMAX 100005
using namespace std;
FILE *fin=fopen("arbint.in","r");
FILE *fout=fopen("arbint.out","w");
int a, b;
int n;
int ARB[4*LMAX];
int maxx;
void citire();
void act(int nod, int st, int dr);
void maxim(int nod, int x, int y);
int main()
{
citire();
fclose(fin);
fclose(fout);
return 0;
}
void citire()
{
int m;
int i;
int c;
fscanf(fin,"%d %d",&n,&m);
for (i=1;i<=n;i++)
{
fscanf(fin,"%d", &b);
a=i;
act(1, 1, n);
}
for (i=1;i<=m;i++)
{
fscanf(fin,"%d %d %d", &c, &a, &b);
if (c==0)
{
maxx=-1;
maxim(1, 1, n);
fprintf(fout,"%d\n", maxx);
}
else
{
act(1, 1, n);
}
}
}
void act(int nod, int st, int dr)
{
int m;
if (st==dr)
{
ARB[nod]=b;
return ;
}
m=(st+dr)/2;
if (a<=m)
act(nod*2, st, m);
else
act(nod*2+1, m+1, dr);
ARB[nod]=max(ARB[2*nod], ARB[2*nod+1]);
}
void maxim(int nod, int x, int y)
{
int m;
if (a<=x&&y<=b)
{if (ARB[nod]>maxx)
maxx=ARB[nod];}
else
{
m=(x+y)/2;
if (a<=m)
maxim(nod*2, x , m);
if (b>m)
maxim(nod*2+1, m+1, y);
}
}