# include <stdio.h>
# include <cstdlib>
using namespace std;
int maxim, poz, maxarb[400004];
void interogare(int nod, int st, int dr, int limi, int lims)
{int mij;
if (limi <= st && dr <= lims)
{
if (maxarb[nod] > maxim)
maxim = maxarb[nod];
return;
}
mij = (st + dr)/2;
if (mij >= limi ) interogare(2 * nod, st, mij, limi, lims);
if (mij < lims) interogare(2 * nod + 1, mij + 1, dr, limi, lims);
}
void actualizare(int nod, int st, int dr, int poz, int val)
{int mij;
if (st == dr)
{
maxarb[nod] = val;
return;
}
mij = (st + dr)/2;
if (poz <= mij) actualizare(2 * nod, st, mij, poz, val);
if (poz > mij) actualizare(2 * nod + 1, mij + 1, dr, poz, val);
if (maxarb[2 * nod] <= maxarb[2 * nod + 1])
maxarb[nod] = maxarb[2 * nod + 1];
else maxarb[nod] = maxarb[2 * nod];
}
int main()
{int i, n, m, x, num, c, d;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for (i = 1; i <= n; i++)
{
scanf("%d",&num);
actualizare(1,1,n,i,num);
}
for (i = 1; i <= m; i++)
{
scanf("%d%d%d",&x,&c,&d);
if (x == 0)
{
maxim = -100;
interogare(1,1,n,c,d);
printf("%d\n",maxim);
}
else
{
actualizare(1,1,n,c,d);
}
}
return 0;
}