#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
#define ll long long
#define LE 1000666
int a[LE];
int Arb[LE];
int result;
void query(int l,int r,int nod,int X,int Y)
{
int mid=(l+r)/2;
if (l>=X&&r<=Y)
{
result=max(result,Arb[nod]);
return;
}
if (X<=mid) query(l,mid,nod*2,X,Y);
if (Y>mid) query(mid+1,r,nod*2+1,X,Y);
}
void update(int l,int r,int nod,int pos)
{
int mid=(l+r)/2;
if (l==r)
{
Arb[nod]=a[pos];
return ;
}
if (pos<=mid) update(l,mid,nod*2,pos);
else update(mid+1,r,nod*2+1,pos);
Arb[nod]=max(Arb[nod*2],Arb[nod*2+1]);
}
int main()
{
int n,m,i;
f>>n>>m;
for(i=1; i<=n; ++i)
{
f>>a[i];
update(1,n,1,i);
}
for(i=1; i<=m; ++i)
{
int typ,xx,yy;
f>>typ;
if (typ==0)
{
f>>xx>>yy;
result=0;
query(1,n,1,xx,yy);
g<<result<<'\n';
}
if (typ==1)
{
f>>xx>>yy;
a[xx]=yy;
update(1,n,1,xx);
}
}
return 0;
}