#define NMAX 400016
#include <cstdio>
#include <algorithm>
using namespace std;
int n, q, T, a, b;
int AI[NMAX], V[NMAX/4];
void form_AI(int left, int right, int index)
{
if(left == right)
{
AI[index] = V[left];
return;
}
int mid = (left + right)/2;
form_AI(left, mid, 2*index);
form_AI(mid+1, right, 2*index+1);
AI[index] = max(AI[2*index], AI[2*index+1]);
}
void modify(int left, int right, int index)
{
if(left == right)
{
AI[index] = b;
return;
}
int mid = (left + right)/2;
if(mid >= a)
modify(left, mid, 2*index);
else modify(mid+1, right, 2*index+1);
AI[index] = max(AI[2*index], AI[2*index+1]);
}
int maxim(int left, int right, int index)
{
if(a <= left && right <= b)
return AI[index];
int maxs = -1, maxdr = -1;
int mid = (left + right)/2;
if(a >= mid+1){
//merg dreapta
maxdr = maxim(mid+1, right, 2*index+1);
}
else if(b <= mid){
// merg stanga
maxs = maxim(left, mid, 2*index);
}
else{
// merg ambele
maxs = maxim(left, mid, 2*index);
maxdr = maxim(mid+1, right, 2*index+1);
}
return max(maxs, maxdr);
}
void read()
{
scanf("%d %d", &n, &q);
for(int i=1; i<=n; ++i)
{
scanf("%d", &V[i]);
}
form_AI(1, n, 1);
}
void solve()
{
for(int i=1; i<=q; ++i)
{
scanf("%d %d %d", &T, &a, &b);
if(T == 1)
modify(1, n, 1);
else printf("%d\n", maxim(1, n, 1));
}
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
read();
solve();
return 0;
}