#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
struct st
{
vector<int>t;
int n;
st() {}
void build(int *a,int v,int l,int r)
{
if(l==r)
{
t[v]=a[l];
}
else
{
int m=(l+r)>>1;
build(a,2*v,l,m);
build(a,2*v+1,m+1,r);
t[v]=max(t[2*v],t[2*v+1]);
}
}
void build(int *a,int _n)
{
n=_n;
t.resize(4*n);
build(a,1,1,n);
}
void upd(int p,int x,int v,int l,int r)
{
if(l==r)
{
t[v]=x;
}
else
{
int m=(l+r)>>1;
if(p<=m)
{
upd(p,x,2*v,l,m);
}
else
{
upd(p,x,2*v+1,m+1,r);
}
t[v]=max(t[2*v],t[2*v+1]);
}
}
void upd(int p,int x)
{
upd(p,x,1,1,n);
}
int ask(int a,int b,int v,int l,int r)
{
if(a>b)
{
return -(1<<30);
}
if(a==l && b==r)
{
return t[v];
}
int m=(l+r)>>1;
int x=ask(a,min(b,m),2*v,l,m);
int y=ask(max(m+1,a),b,2*v+1,m+1,r);
return max(x,y);
}
int ask(int l,int r)
{
return ask(l,r,1,1,n);
}
};
const int N=100000+5;
int n,q;
int v[N];
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>v[i];
}
st a;
a.build(v,n);
while(q--)
{
int t,x,y;
cin>>t>>x>>y;
if(t==0)
{
cout<<a.ask(x,y)<<"\n";
}
else
{
a.upd(x,y);
}
}
return 0;
}