#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int poz,val;
int Max[400100],maxi;
int maxim(int a,int b){return (a>b?a:b);}
void act(int nod,int st,int dr){if(st==dr)Max[nod]=val;
else{int m;
m=(st+dr)/2;
if(poz<=m) act(2*nod,st,m);
else act(2*nod+1,m+1,dr);
Max[nod]=maxim(Max[2*nod],Max[2*nod+1]);
}
}
void inter(int nod,int st,int dr,int a,int b)
{if(a<=st && dr<=b){if(maxi<Max[nod])maxi=Max[nod];}
else {int m;
m=(st+dr)/2;
if(a<=m)inter(2*nod,st,m,a,b);
if(b>m)inter(2*nod+1,m+1,dr,a,b);
}
}
int main()
{int n,m,i,a,b,x;
fin>>n>>m;
for(i=1;i<=n;i++)
{fin>>x;
poz=i;val=x;
act(1,1,n);
}
for(i=1;i<=m;i++)
{fin>>x;fin>>a;fin>>b;
if(x==0){maxi=-1;
inter(1,1,n,a,b);
fout<<maxi<<"\n";
}
else{poz=a;
val=b;
act(1,1,n);
}
}
return 0;
}