#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;
int v[NMAX];
FILE *fin = fopen("arbint.in","r");
FILE *fout= fopen("arbint.out","w");
void update(int nod,int st,int dr,int poz,int val)
{
if(st == dr)
v[nod] = val;
else
{
int d = (st + dr)/2;
if(poz <= d)
update(nod*2, st, d, poz, val);
else
update(nod*2+1, d+1, dr, poz, val);
v[nod] = max(v[nod*2],v[nod*2+1]);
}
}
void query(int nod,int st,int dr,int x,int y,int &rez)
{
if( st >= x && dr <= y)
rez = max(rez,v[nod]);
else
{
int d = (st+dr)/2;
if(d >=x )
query(nod*2, st, d, x, y, rez);
if(d < y )
query(nod*2+1, d+1, dr, x, y, rez);
}
}
void citire()
{
int n, m, x, y, tip, maxx;
fscanf(fin,"%d %d",&n,&m);
for(int i=1;i<=n;++i)
{
fscanf(fin,"%d",&x);
update(1,1,n,i,x);
}
while(m--)
{
fscanf(fin,"%d %d %d",&tip,&x,&y);
if( tip == 0 )
{
maxx = -1;
query(1,1,n,x,y,maxx);
fprintf(fout,"%d\n",maxx);
}
else
update(1,1,n,x,y);
}
}
int main()
{
citire();
}