#include<cstdio>
using namespace std;
int n,m,i,pos,val,maxim,c,a,b,arb[4*100010+66];
void read(),solve(),upd(int,int,int),query(int,int,int);
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
pos=i;scanf("%d",&val);
upd(1,1,n);
}
}
void solve()
{
for(;m;m--)
{
scanf("%d%d%d",&c,&a,&b);
if(c==0)
{
maxim=-1;
query(1,1,n);
printf("%d\n",maxim);
continue;
}
pos=a;val=b;
upd(1,1,n);
}
}
void upd(int nod,int st,int dr)
{
if(st==dr)
{
arb[nod]=val;
return;
}
int mid=(st+dr)/2;
if(pos<=mid)upd(nod*2,st,mid);
else upd(nod*2+1,mid+1,dr);
if(arb[nod*2+1]>arb[nod*2])arb[nod]=arb[nod*2+1];
else arb[nod]=arb[nod*2];
}
void query(int nod,int st,int dr)
{
if(a<=st && dr<=b)
{
maxim=maxim<arb[nod]?arb[nod]:maxim;
return ;
}
int mid=(st+dr)/2;
if(a<=mid)query(nod*2,st,mid);
if(mid<b) query(nod*2+1,mid+1,dr);
}