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