#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int aint[4*(int)1e5];
void u(int nod, int st, int dr, int numar,int pos){
int mij;
if(st == dr) aint[nod] = numar;
else{
mij = (st+dr)/2;
if(pos <= mij) u(2*nod, st, mij, numar, pos);
else u(2*nod+1, mij+1, dr, numar, pos);
aint[nod] = max(aint[2*nod],aint[2*nod+1]);
}
}
int q(int nod, int st, int dr, int p1, int p2){
int mij;
if(p1 == st && p2 == dr) return aint[nod];
else{
mij = (st+dr)/2;
if(p2 <= mij) return q(2*nod,st,mij,p1,p2);
else if(p1 > mij) return q(2*nod+1,mij+1,dr,p1,p2);
else return max(q(2*nod,st,mij,p1,mij),q(2*nod+1,mij+1,dr,mij+1,p2));
}
}
int main(){
int n,m,i,x,y,j,nr;
f>>n>>m;
for(i = 1; i <= n; i++){
f>>nr;
u(1,1,n,nr,i);
}
for(i = 1; i <= m; i++){
f>>j>>x>>y;
if(!j)g<<q(1,1,n,x,y)<<"\n";
else u(1,1,n,y,x);
}
}