#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100005;
int aint[NMAX * 4];
int query(int cur, int st, int dr, int qst, int qdr)
{
if(qdr <= st || dr <= qst)
return 0;
if(qst <= st && dr <= qdr)
return aint[cur];
int mid = (st + dr) / 2;
return max(query(cur*2, st, mid, qst, qdr), query(cur*2+1, mid, dr, qst, qdr));
}
void update(int cur, int st, int dr, int pos, int new_val)
{
if(st == dr)
aint[cur] = new_val;
else
{
int mid = (st + dr) / 2;
if(pos < mid)
update(cur*2, st, mid, pos, new_val);
else
update(cur*2+1, mid, dr, pos, new_val);
aint[cur] = max(aint[cur*2], aint[cur*2+1]);
}
}
int main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, m, a, b, c;
cin>>n>>m;
for(int i=1; i<=n; i++)
{
cin>>a;
update(1, 1, 1, i, a);
}
for(int i=1; i<=m; i++)
{
cin>>a>>b>>c;
if(a == 0)
cout<<query(1, 1, 1, b, c)<<'\n';
else if(a == 1)
update(1, 1, 1, a, b);
}
return 0;
}