#include <cstdio>
#include <algorithm>
#define dim 100001
using namespace std;
int n, m, start, finish, val, pos, maxim;
int MaxArb[4*dim+66];
void update(int nod, int left, int right)
{
if(left==right)
{
MaxArb[nod]=val;
}
else
{
int mid=(left+right)/2;
if(pos<=mid)
update(nod*2,left,mid);
else
update(nod*2+1,mid+1,right);
MaxArb[nod]=max(MaxArb[nod*2],MaxArb[nod*2+1]);
}
}
void query(int nod, int left, int right)
{
if(start<=left&&right<=finish)
{
if(maxim<MaxArb[nod])
{
maxim=MaxArb[nod];
}
}
else
{
int mid=(left+right)/2;
if(start<=mid)
query(nod*2,left,mid);
if(mid<finish)
query(nod*2+1,mid+1,right);
}
}
int main()
{
int x,a,b;
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++)
{
scanf("%d", &x);
pos=i;
val=x;
update(1,1,n);
}
for(int i=1; i<=m; i++)
{
scanf("%d%d%d", &x, &a, &b);
if(x)
{
pos=a;
val=b;
update(1,1,n);
}
else
{
maxim=-1;
start=a;
finish=b;
query(1,1,n);
printf("%d\n", maxim);
}
}
return 0;
}