#include <fstream>
#include <algorithm>
using namespace std;
ifstream fi("arbint.in");
ofstream fo("arbint.out");
int A[100010];
int S[400010];
int n,m;
void build(int root=1, int l=1, int r=n+1)
{
if (r-l==1)
S[root]=0;
else
{
int mid;
mid=(l+r+1)/2;
build(2*root,l,mid);
build(2*root+1,mid,r);
S[root]=max(S[2*root],S[2*root+1]);
}
}
void modify(int root, int l, int r, int poz, int x)
/// A[poz]=x
{
int mid;
if (poz<l || poz>=r)
return;
A[poz]=x;
S[root]=x;
if (r-l>1)
{
mid=(l+r+1)/2;
modify(root*2,l,mid,poz,x);
modify(root*2+1,mid,r,poz,x);
S[root]=max(S[root*2],S[root*2+1]);
}
}
int query(int root, int l, int r, int st, int dr)
{
if (dr<=l || st>=r)
return 0;
if (st<=l && dr>=r)
return S[root];
int mid;
mid=(l+r+1)/2;
return max(query(root*2,l,mid,st,dr),query(root*2+1,mid,r,st,dr));
}
int main()
{
fi>>n>>m;
build(1,1,n+1);
for (int i=1;i<=n;i++)
{
int a;
fi>>a;
modify(1,1,n+1,i,a);
}
for (int i=1;i<=m;i++)
{
int a,b,tip;
fi>>tip;
if (tip==0)
{
fi>>a>>b;
fo<<query(1,1,n+1,a,b+1)<<"\n";
}
else
{
fi>>a>>b;
modify(1,1,n+1,a,b);
}
}
fi.close();
fo.close();
return 0;
}