#include <cstdio>
#define FOR(a,b,c) for(int a=b; a<=c; a++)
#define max(a,b) (a>b?a:b)
using namespace std;
int n, m, maxim, x, l, a, b, v[300010], q, t;
void update(int nod, int st, int dr){
if(st==dr)
{
v[nod]=x;
return;
}
int mij=(st+dr)>>1;
if(l<=mij)
update(2*nod, st, mij);
else
update(2*nod+1, mij+1, dr);
v[nod]=max(v[2*nod], v[2*nod+1]);
}
void querry(int nod, int st, int dr){
if(a<=st && b>=dr)
{
maxim=max(maxim, v[nod]);
return;
}
int mij=(st+dr)>>1;
if(a<=mij)
querry(2*nod, st, mij);
if(b>mij)
querry(2*nod+1, mij+1, dr);
}
int main(){
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d %d", &n, &q);
FOR(i,1,n)
{
scanf("%d", &x);
l=i;
update(1, 1, n);
}
FOR(i,1,q)
{
scanf("%d", &t);
if(t==1)
{
scanf("%d %d", &l, &x);
update(1, 1, n);
}
else
{
scanf("%d %d", &a, &b);
maxim=0;
querry(1, 1, n);
printf("%d\n", maxim);
}
}
return 0;
}