#include <bits/stdc++.h>
#define DMAX 300010
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int a[DMAX];
void citire();
void Adaug(int val,int st,int dr,int poz,int nod);
int Query(int nod,int st,int dr,int x,int y);
int n,m;
inline int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
int main()
{
citire();
}
void citire()
{int i,x,op,y,j;
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>x,Adaug(x,1,n,i,1);
for(i=1;i<=m;i++)
{fin>>op>>x>>y;
if(op==1)
Adaug(y,1,n,x,1);
else
{
fout<<Query(1,1,n,x,y)<<'\n';
}
}
}
void Adaug(int val,int st,int dr,int poz,int nod)
{int mij;
if(st==dr)
a[nod]=val;
else
{
mij=(st+dr)/2;
if(poz<=mij)
Adaug(val,st,mij,poz,2*nod);
else
Adaug(val,mij+1,dr,poz,2*nod+1);
a[nod]=maxim(a[2*nod],a[2*nod+1]);
}
}
int Query(int nod,int st,int dr,int x,int y)
{ int mij,rez1=0,rez2=0;
if(x<=st&&y>=dr)
return a[nod];
else
{mij=(st+dr)/2;
if(mij>=x)
rez1=Query(2*nod,st,mij,x,y);
if(mij<y)
rez2=Query(2*nod+1,mij+1,dr,x,y);
return maxim(rez1,rez2);
}
}