#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define nmax 100000
int mini[4*nmax+5];
int n,m,i,poz,x,a,b,t,minim,start,finish;
void act(int nod, int st, int dr,int val)
{
if(st==dr)
{
mini[nod]=val;
return ;
}
else
{
int mij=(st+dr)/2;
if(poz<=mij)act(2*nod,st,mij,val);
if(poz>mij)act(2*nod+1,mij+1,dr,val);
mini[nod]=max(mini[2*nod],mini[2*nod+1]);
}
}
void query(int nod,int st, int dr)
{
if(start<=st&&dr<=finish)
{
minim=max(minim,mini[nod]);
return ;
}
int mij=(st+dr)/2;
if(start<=mij)query(2*nod,st,mij);
if(finish>mij)query(2*nod+1,mij+1,dr);
}
int main()
{
fin>>n>>m;
for(i=1; i<=n; i++)
{
fin>>x;
poz=i;
act(1,1,n,x);
}
for(i=1; i<=m; i++)
{
fin>>t>>a>>b;
if(t==0)
{
start=min(a,b);
finish=max(a,b);
minim=-1;
query(1,1,n);
fout<<minim<<'\n';
}
else
{
poz=a;
act(1,1,n,b);
}
}
return 0;
}