#include <stdio.h>
long n, m, i, j, aa, bb, x, t[400000], init[100000];
int tip;
void initializeaza(long st, long dr, long poz);
long interogare(long p, long a, long b);
void modif(long p, long val);
long max(long a, long b);
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%ld%ld", &n, &m);
initializeaza(1, n, 1);
for (i=1; i<=n; i++)
{
scanf("%ld", &x);
modif(init[i], x);
}//for i
for (i=0; i<m; i++)
{
scanf("%d%ld%ld", &tip, &aa, &bb);
if (tip==0)
printf("%ld\n", interogare(1, 1, n));
if (tip==1)
modif(init[aa], bb);
}//for i
return 0;
}//main
void initializeaza(long st, long dr, long poz)
{
long mij;
if (st==dr)
init[st]=poz;
else
{
mij=(st+dr)/2;
initializeaza(st, mij, 2*poz);
initializeaza(mij+1, dr, 2*poz+1);
}//else
}//initializeaza
long interogare(long p, long a, long b)
{
long mij, rez;
if ((aa<=a)&&(b<=bb))
return t[p];
mij=(a+b)/2;
rez=-1;
if (aa<=mij)
rez=max(rez, interogare(2*p, a, mij));
if (bb>mij)
rez=max(rez, interogare(2*p+1, mij+1, b));
return rez;
}//interogare
void modif(long p, long val)
{
t[p]=val;
p/=2;
for(;p;p/=2)
t[p]=max(t[p*2], t[2*p+1]);
}//modif
long max(long a, long b)
{
if (a>b)
return a;
else
return b;
}//max