#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int t[500005];
void update(int nod,int st,int dr,int nr,int pos)
{
if(dr==st)
{
t[nod]=nr;
return;
}
int m=(st+dr)/2;
if(pos<=m)
{
update(2*nod,st,m,nr,pos);
}
else
{
update(2*nod+1,m+1,dr,nr,pos);
}
t[nod]=max(t[nod*2],t[nod*2+1]);
}
int maxim;
void intrebare(int nod,int st,int dr,int stdorit,int drdorit)
{
if(stdorit<=st && dr<=drdorit)
{
maxim=max(maxim,t[nod]);
return;
}
int m=(st+dr)/2;
if(stdorit<=m)
{
intrebare(2*nod,st,m,stdorit,drdorit);
}
if(m<drdorit)
{
intrebare(2*nod+1,m+1,dr,stdorit,drdorit);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,q;
in>>n>>q;
int nr;
for(int i=1;i<=n;i++)
{
in>>nr;
update(1,1,n,nr,i);
}
int tip,a,b;
for(int i=1;i<=q;i++)
{
in>>tip>>a>>b;
if(tip==0)
{
maxim=0;
intrebare(1,1,n,a,b);
out<<maxim<<"\n";
}
else
{
update(1,1,n,b,a);
}
}
return 0;
}