#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
class AINT
{
ll n;
vector<ll> v;
void build(vector<ll>&a,ll st,ll dr,ll p)
{
if(st==dr)return v[p]=a[st],void();
ll mid=(st+dr)/2;
build(a,st,mid,p+1);
build(a,mid+1,dr,p+2*(mid-st+1));
v[p]=max(v[p+1],v[p+2*(mid-st+1)]);
}
void set(ll st,ll dr,ll p,ll pz,ll val)
{
if(st==dr)return v[p]=val,void();
ll mid=(st+dr)/2;
if(pz<=mid)set(st,mid,p+1,pz,val);
else set(mid+1,dr,p+2*(mid-st+1),pz,val);
v[p]=max(v[p+1],v[p+2*(mid-st+1)]);
}
ll ask(ll st,ll dr,ll p,ll l,ll r)
{
if(l<=st&&r>=dr)return v[p];
ll mid=(st+dr)/2;
if(r<=mid)return ask(st,mid,p+1,l,r);
if(l>mid)return ask(mid+1,dr,p+2*(mid-st+1),l,r);
return max(ask(st,mid,p+1,l,r),ask(mid+1,dr,p+2*(mid-st+1),l,r));
}
public:
AINT(ll x=0){n=x;v.resize(2*n);}
void build(vector<ll>&a)
{
build(a,1ll,n,0ll);
}
void set(ll pz,ll val)
{
set(1ll,n,0ll,pz,val);
}
ll ask(ll l,ll r)
{
return ask(1ll,n,0ll,l,r);
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
ll n,m,a,x,y,i;
cin>>n>>m;
vector<ll>v(n+1);
for(i=1;i<=n;i++)cin>>v[i];
AINT alex(n);
alex.build(v);
while(m--)
{
//cerr<<m<<endl;
cin>>a>>x>>y;
if(a==0)
{
cout<<alex.ask(x,y)<<'\n';
}
else
{
alex.set(x,y);
}
}
return 0;
}