#include <cstdio>
using namespace std;
int arb[200500];
int maxim(int a,int b)
{
if (a>b)
return a;
return b;
}
int var1,var2,maxint;
void update(int nod, int left, int right)
{
if (left==right)
arb[nod]=var2;
else
{
int mid=left+(right-left)/2;
if (var1<=mid)
update(nod*2,left,mid);
else
update(nod*2+1,mid+1,right);
arb[nod]=maxim(arb[nod*2],arb[nod*2+1]);
}
}
void ask(int nod,int left,int right)
{
if ((left>=var1)&&(right<=var2))
{
if (arb[nod]>maxint)
maxint=arb[nod];
return;
}
int mid=left+(right-left)/2;
if (mid>=var1)
ask(nod*2,left,mid);
if (mid<var2)
ask(nod*2+1,mid+1,right);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int n,m,i,c;
scanf("%d %d\n",&n,&m);
for (var1=1;var1<n;++var1)
{
scanf("%d ",&var2);
update(1,1,n);
}
scanf("%d\n",&var2);
update(1,1,n);
for (i=0;i<m;++i)
{
scanf("%d %d %d\n",&c,&var1,&var2);
if (c)
update(1,1,n);
else
{
maxint=-1;
ask(1,1,n);
printf("%d\n",maxint);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}