#include <iostream>
#include <cstdio>
using namespace std;
const int NMax = 500005;
int N, M;
int ai[NMax], v[NMax];
void Build(int st, int dr, int pai)
{
if(st == dr)
{
ai[pai]=v[st];
return;
}
int mij=st+(dr-st)/2;
Build(st, mij, 2*pai);
Build(mij+1, dr, 2*pai+1);
ai[pai]=max(ai[2*pai], ai[2*pai+1]);
}
int a,b,maxi;
void Update(int st, int dr, int pai)
{
if(st == dr)
{
ai[pai]=b;
return;
}
int mij=st+(dr-st)/2;
if(a<=mij)
Update(st,mij,2*pai);
else
Update(mij+1,dr,2*pai+1);
ai[pai]=max(ai[2*pai], ai[2*pai+1]);
}
void Query(int st, int dr, int pai)
{
if( a<=st && b>=dr )
{
maxi=max(maxi,ai[pai]);
return;
}
int mij=st+(dr-st)/2;
if(a<=mij)
Query(st, mij, 2*pai);
if(b>mij)
Query(mij+1, dr, 2*pai+1);
}
void Read()
{
scanf("%d %d", &N, &M);
for(int i=1; i<=N; ++i)
scanf("%d", &v[i]);
Build(1, N, 1);
for(int i=1; i<=M; ++i)
{
int t;
scanf("%d %d %d", &t, &a, &b);
if(t==0)
{ maxi=-1;
Query(1, N, 1);
printf("%d\n", maxi);
}
else
Update(1, N, 1);
}
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
Read();
return 0;
}