#include <fstream>
using namespace std;
const int MAX = 262144;
int aint[MAX];
int query(int a, int b, int nod, int inc, int sf)
{
if(a<=inc&&b>=sf)
return aint[nod];
else
{
int m = (inc+sf)>>1;
if(a<=m&&m<b)
return max(query(a,b,2*nod,inc,m),query(a,b,2*nod+1,m+1,sf));
if(a<=m)
return query(a,b,2*nod,inc,m);
if(m<b)
return query(a,b,2*nod+1,m+1,sf);
}
}
void update(int nod, int inc, int sf, int val, int pos)
{
if(inc==sf){
aint[nod] = val;
return;
}
int m = (inc+sf)>>1;
if(pos<=m) update(2*nod, inc, m, val, pos);
else update(2*nod+1, m+1, sf, val, pos);
aint[nod] = max(aint[2*nod],aint[2*nod+1]);
}
int main()
{
int n,m;
ifstream f("arbint.in");
ofstream h("arbint.out");
f>>n>>m;
int a;
int b,c;
for(int i=1;i<=n;++i)
{
f>>a;
update(1,1,n,a,i);
}
while(m--)
{
f>>a>>b>>c;
switch(a)
{
case 0:
h<<query(b,c,1,1,n)<<'\n';
break;
case 1:
update(1,1,n,c,b);
break;
}
}
f.close();
h.close();
return 0;
}