#include <stdio.h>
#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;
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d%d",&n,&m);
int a;
int b,c;
for(int i=1;i<=n;++i)
{
scanf("%d",&a);
update(1,1,n,a,i);
}
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
switch(a)
{
case 0:
printf("%d\n",query(b,c,1,1,n));
break;
case 1:
update(1,1,n,c,b);
break;
}
}
return 0;
}