#include <cstdio>
using namespace std;
int n, m, i, x, v[100010], l, a, b, t;
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]);
}
int querry(int n, int p, int u){
if(a<=p && b>=u)
return v[n];
int s=0, d=0, m=(p+u)/2;
if(a<=m)
s=querry(2*n, p, m);
if(b>m)
d=querry(2*n+1, m+1, u);
return (s>d?s:d);
}
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);
printf("%d\n", querry(1, 1, n));
}
}
return 0;
}