#include <cstdio>
using namespace std;
void actualizare(int nrNod, int St, int Dr, int stChange, int drChange, int* &arbInt, int valoare)
{
if (stChange <= St && Dr <= drChange)
arbInt[nrNod] = valoare;
else
{
int mij = (Dr - St) / 2 + St;
if (stChange <= mij)
actualizare(nrNod * 2,St,mij,stChange,drChange,arbInt,valoare);
if (drChange > mij)
actualizare(nrNod * 2 + 1,mij+1,Dr,stChange,drChange,arbInt,valoare);
arbInt[nrNod] = arbInt[nrNod * 2 + 1];
if (arbInt[nrNod] < arbInt[nrNod * 2])
arbInt[nrNod] = arbInt[nrNod * 2];
}
}
int intrebare(int nrNod, int St, int Dr, int stChange, int drChange, int* &arbInt)
{
if (stChange <= St && Dr <= drChange)
{
return arbInt[nrNod];
}
else
{
int mij = (Dr - St) / 2 + St;
int a(-1), b(-1);
if (stChange <= mij)
a = intrebare(nrNod * 2,St,mij,stChange,drChange,arbInt);
if (drChange > mij)
b = intrebare(nrNod * 2 + 1,mij + 1,Dr,stChange,drChange,arbInt);
if (a < b)
a = b;
return a;
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int* arbInt = new int[257000];
for (int i = 0 ; i < 257000 ; i++)
arbInt[i] = -1;
int n(0), m(0);
scanf("%d %d\n",&n,&m);
for (int i = 0 ; i < n ; i++)
{
int a(0);
scanf("%d",&a);
actualizare(1,1,n,i + 1,i + 1,arbInt,a);
}
for (int i = 0 ; i < m ; i++)
{
int a(0), b(0);
scanf("%d",&a);
if (a == 0)
{
scanf("%d %d\n",&a,&b);
printf("%d\n",intrebare(1,1,n,a,b,arbInt));
}
else
{
scanf("%d %d\n",&a,&b);
actualizare(1,1,n,a,a,arbInt,b);
}
}
}