#include <stdio.h>
#define Nmax 100024
int a[3*Nmax], n, ret, m;
void up_(int ind,int st,int dr,int i,int nr)
{
if (st == dr)
{
a[ind] = nr;
}
else
{
int mid = (st+dr)/2;
if (i<=mid) up_(ind*2,st,mid,i,nr);
else up_(ind*2+1,mid+1,dr,i,nr);
a[ind] = a[ind*2];
if (a[ind] < a[ind*2+1])
a[ind] = a[ind*2+1];
}
}
void q(int ind,int st,int dr,int x,int y)
{
if (x<=st && dr<=y)
{
if (a[ind] > ret)
ret = a[ind];
}
else
{
int mid = (st+dr)/2;
if (x<=mid) q(ind*2,st,mid,x,y);
if (y>=mid+1) q(ind*2+1,mid+1,dr,x,y);
}
}
int Q(int st,int dr)
{
ret = 0;
q(1,1,n,st,dr);
return ret;
}
void up(int i,int nr)
{
up_(1,1,n,i,nr);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d", &n,&m);
int i,x,y,op;
for (i=1;i<=n;++i)
{
scanf("%d", &x);
up(i,x);
}
for (i=1;i<=m;++i)
{
scanf("%d%d%d", &op,&x,&y);
if (op==0) printf("%d\n", Q(x,y));
else up(x,y);
}
return 0;
}