#include <cstdio>
using namespace std;
int n, m, i, x, v[300010], l, a, b, t, maxim;
void update(int n, int p, int u){
if(p==u)
{
v[n]=x;
return;
}
int m=(p+u)/2;
if(l<=m)
update(n*2 , p, m);
else if(l>m)
update(n*2+1, m+1, u);
v[n]=(v[n*2]>v[n*2+1]?v[n*2]:v[n*2+1]);
}
void querry(int n, int p, int u){
if(a<=p && b>=u)
{
maxim=(maxim>v[n]?maxim:v[n]);
return;
}
int m=(p+u)/2;
if(a<=m)
querry(2*n, p, m);
if(b>m)
querry(2*n+1, m+1, u);
}
int main(){
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d %d", &n, &m);
for(i=1; i<=n; i++)
{
scanf("%d", &x);
l=i;
update(1, 1, n);
}
for(i=1; i<=m; i++)
{
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;
}