#include <fstream>
#include <iostream>
#define mx(x,y) x>y?x:y;
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,a[400010], poz, val;
void modify(int, int ,int);
int interogate(int, int, int, int, int);
int main()
{
f >> n >> m;
for(poz=1; poz<=n; ++poz)
{
f >> val;
modify(1, 1, n);
}
for(int i=1; i<=m; ++i)
{
f >> a[0] >> poz >> val;
if(a[0])
{
modify(1, 1, n);
}
else
{
g << interogate(1, poz, val, 1, n) << '\n';
}
}
}
void modify(int cur, int st, int dr)
{
int m = (dr + st)>>1;
if(dr == st)
{
a[cur] = val;
}
else
{
if(poz<=m)
{
modify(2*cur, st, m);
}
else
{
modify(2*cur+1, m+1, dr);
}
a[cur] = mx(a[cur*2], a[cur*2+1]);
}
}
int interogate(int cur, int s, int d, int st, int dr)
{
if(s == st && d == dr)
{
return a[cur];
}
else
{
int m = (st + dr) >> 1;
if(s <= m)
{
if(d > m)
{
int a = interogate(2 * cur, s, m, st, m), b = interogate(2 * cur + 1, m + 1, d, m+1, dr);
return mx(a,b);
}
else
{
return interogate(2 * cur, s, d, st, m);
}
}
else
{
return interogate(2 * cur + 1, s, d, m+1, dr);
}
}
}