#include <cstdio>
using namespace std;
int arb[1<<19];
int n,m,i,poz,a,b,tip,x;
inline void act(int nod,int st,int dr)
{
int m;
if (st>=dr)
arb[nod]=x;
else
{
m=(st+dr)/2;
if (i<=m) act(2*nod,st,m);
else act(2*nod+1,m+1,dr);
if (arb[2*nod]<arb[2*nod+1]) arb[nod]=arb[2*nod+1];
else arb[nod]=arb[2*nod];
}
}
inline int interogare(int nod,int st,int dr)
{
int val1=0,val2=0,m;
if (a<=st && dr<=b) return arb[nod];
m=(st+dr)/2;
if (a<=m) val1=interogare(2*nod,st,m);
if (b>m) val2=interogare((2*nod+1),m+1,dr);
if (val1>val2) return val1;
return val2;
}
int main()
{
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;
act(1,1,n);
}
for (int j=1;j<=n;++j)
{
scanf("%d %d %d", &tip, &a, &b);
if (tip==1)
{
i=a;
x=b;
act(1,1,n);
}
else
printf("%d\n", interogare(1,1,n));
}
return 0;
}