#include <cstdio>
#include <algorithm>
using namespace std;
int n, m, x[100005], ai[400005], cer, a, b;
void pune(int i, int j, int pozInSir)
{
if(i == j)
{
ai[pozInSir]=x[i];
return;
}
int mij=(i+j)/2;
pune(i, mij, pozInSir*2);
pune(mij+1, j, pozInSir*2+1);
ai[pozInSir]=max(ai[pozInSir*2], ai[pozInSir*2+1]);
}
void update(int i, int j, int pozInSir, int poz, int x)
{
if(i == j)
{
ai[pozInSir]=x;
return;
}
int mij=(i+j)/2;
if(poz <= mij)
update(i, mij, pozInSir*2, poz, x);
else
update(mij+1, j, pozInSir*2+1, poz, x);
ai[pozInSir]=max(ai[pozInSir*2], ai[pozInSir*2+1]);
}
int afla(int st, int dr, int i, int j, int pozInSir)
{
if(dr<st)
return 0;
if(i <= st && j >= dr)
return ai[pozInSir];
int mij=(st+dr)/2;
int vst=0, vdr=0;
if(i > mij)
vdr=afla(mij+1, dr, i, j, pozInSir*2+1);
else if(j <= mij)
vst=afla(st, mij, i, j, pozInSir*2);
else
{
vst=afla(st, mij, i, j, pozInSir*2);
vdr=afla(mij+1, dr, i, j, pozInSir*2+1);
}
return max(vst, vdr);
}
int main()
{
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[i]);
pune(1, n, 1);
for(int i=1; i<=m; i++)
{
scanf("%d %d %d", &cer, &a, &b);
if(cer == 0)
{
printf("%d\n", afla(1, n, a, b, 1));
continue;
}
update(1, n, 1, a, b);
}
return 0;
}