#include <cstdio>
#include <algorithm>
#define N 1<<18
using namespace std;
int a,b,ARB[N],n,m,j,z,i,cod;
int Query(int st,int dr,int nod)
{
int mij=(st+dr)>>1;
if(b<st||a>dr)
return 0;
if(a<=st&&b>=dr)
return ARB[nod];
return max(Query(st,mij,nod*2),Query(mij+1,dr,nod*2+1));
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(z=1;z<n;z<<=1);
z--;
for(i=1;i<=n;i++)
scanf("%d",&ARB[i+z]);
for(i=z;i>=1;i--)
ARB[i]=max(ARB[2*i],ARB[2*i+1]);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&cod,&a,&b);
if(cod)
{
a+=z;
ARB[a]=b;
for(j=a>>1;j;j>>=1)
ARB[j]=max(ARB[2*j],ARB[2*j+1]);
}
else
printf("%d\n",Query(1,z,1));
}
return 0;
}