#include <stdio.h>
#define Nmax 2000100
int t[Nmax], ret, n,m;
int max(int A,int B)
{
if (A>B) return A;
return B;
}
void update(int nod,int st,int dr,int a,int x)
{
if(a<=st && dr<=a)
{
t[nod] = x;
}
else
{
int mij = (st+dr)/2;
if(a<=mij) update(nod*2,st,mij,a,x);
if(a> mij) update(nod*2+1,mij+1,dr,a,x);
t[nod] = max(t[nod*2],t[nod*2+1]);
}
}
void search(int nod,int st,int dr,int a,int b)
{
if (a<=st && dr<=b)
{
ret = max(ret,t[nod]);
}
else
{
int mij = (st+dr)/2;
if (a<=mij) search(nod*2,st,mij,a,b);
if (b >mij) search(nod*2+1,mij+1,dr,a,b);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d", &n,&m);
int i,x,a,b;
for (i=1;i<=n;++i)
{
scanf("%d", &x);
update(1,1,n,i,x);
}
for (i=1;i<=m;++i)
{
scanf("%d%d%d", &x,&a,&b);
if (x==0)
{
ret=-1;
search(1,1,n,a,b);
printf("%d\n", ret);
}
else
{
update(1,1,n,a,b);
}
}
return 0;
}