#include<stdio.h>
#define MAX(a,b) (a)>(b)?(a):(b)
int i,n,m,x;
int A[262000];
void _update(int nod,int st,int dr,int poz,int val);
int _find(int nod,int st,int dr,int a,int b);
int main()
{
int a,b,op;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i = 1; i <= n;i++)
{
scanf("%d",&x);
_update(1,1,n,i,x);
}
for(;m--;)
{
scanf("%d%d%d",&op,&a,&b);
if(!op)
{
printf("%d\n",_find(1,1,n,a,b));
}
else
{
_update(1,1,n,a,b);
}
}
return 0;
}
void _update(int nod, int st, int dr, int poz, int val)
{
if(st == dr)
{
A[nod] = val;
}
else
{
int mj = (st + dr) / 2;
if(poz <= mj) _update(2*nod,st,mj,poz,val);
else _update(2*nod+1, mj+1,dr,poz,val);
A[nod] = MAX(A[2*nod],A[2*nod+1]);
}
}
int _find(int nod,int st,int dr,int a,int b)
{
if(a<=st && b>=dr) return A[nod];
int mj = (st+dr)/2,maxim=-1;
if(mj>=a) maxim = _find(nod*2,st,mj,a,b);
if(mj<b) maxim = MAX(maxim, _find(nod*2+1,mj+1,dr,a,b));
return maxim;
}