#include <fstream>
#include <vector>
#define ll long long
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
class AINT{
vector<ll> v;
ll n;
void build(ll st, ll dr, ll p, vector<ll>& a)
{
if(st == dr)
{
v[p] = a[st];
return;
}
ll mid = (st + dr)>>1;
build(st, mid, p<<1, a);
build(mid + 1, dr, p<<1|1, a);
v[p] = max(v[p<<1], v[p<<1|1]);
}
void set(ll st, ll dr, ll p, ll poz, ll val)
{
ll mid = (st + dr)>>1;
if(st == dr)
{
v[p] = val;
return;
}
if(poz <= mid)
set(st, mid, p<<1, poz, val);
else
set(mid + 1, dr, p<<1|1, poz, val);
v[p]=max(v[p<<1], v[p<<1|1]);
}
ll query(ll st, ll dr, ll p, ll l, ll r)
{
if(l <= st && r >= dr)
return v[p];
if(dr < l || st > r)
return 0ll;
ll mid = (st + dr) >> 1;
return max(query(st, mid, p<<1, l, r), query(mid + 1, dr, p<<1|1, l, r));
}
public:
AINT(ll x)
{
n = x;
v.resize(4 * n + 4);
}
void build(vector<ll> &v){build(1, n, 1, v);}
void set(ll poz, ll val){set(1, n, 1, poz, val);}
ll query(ll l, ll r){return query(1, n, 1, l, r);}
};
int main()
{
ll n, m;
int i;
cin>>n>>m;
vector<ll> v(n + 5);
for(i = 1; i <= n; i++)
cin>>v[i];
AINT Alex(n);
Alex.build(v);
ll a, b;
for(i = 1; i <= m; i++)
{
char ch;
cin>>ch;
cin>>a>>b;
if(ch == '0')
cout<<Alex.query(a, b)<<'\n';
else
Alex.set(a, b);
}
return 0;
}