#include <iostream>
#include <fstream>
#define dim 100005
using namespace std;
ifstream f ("arbint.in");
ofstream g ("arbint.out");
int v[dim*4 + 5], st, dr, n,m,i,caz, maxim, x, a,b;
inline void update(int st,int dr,int poz,int val,int nod)
{
if(st == dr)
{
v[nod] = val;
return;
}
int m = (st + dr)/2;
if(m >= poz)
update(st,m,poz,val,nod*2);
else
update(m + 1,dr,poz,val,nod*2 + 1);
v[nod] = max(v[nod*2], v[nod*2 + 1]);
}
void query(int st,int dr,int a,int b,int nod)
{
if(st >= a && dr <= b)
{
maxim = max(maxim, v[nod]);
return;
}
int m = (st + dr) / 2;
if(m >= a) query(st,m,a,b,nod*2);
else if(b > m) query(m + 1,dr,a,b,nod*2 + 1);
}
int main()
{
int i,a,b,x;
f >> n >> m;
for(i = 1; i <= n; i++)
{
f >> x;
update(1,n,i,x,1);
}
for(i = 1; i <= m; i++)
{
f >> caz >> a >> b;
if(caz == 1)
update(1,n,a,b,1);
else
{
maxim = -1;
query(1,n,a,b,1);
g << maxim << '\n';
}
}
return 0;
}