#include<cstdio>
#define N 1<<17
int rasp,poz[N],val[4*N];
void first(int a,int b,int nod)
{
if(a==b)
{
poz[a]=nod;
return;
}
int mij=(a+b)/2;
first(a,mij,2*nod);
first(mij+1,b,2*nod+1);
}
int maxim(int x,int y)
{
return x<y?y:x;
}
void modif(int nod)
{
if(nod==0)
return;
val[nod]=maxim(val[2*nod],val[2*nod+1]);
modif(nod/2);
}
void search(int nod,int st,int dr,int a,int b)
{
if(b<st || a>dr)
return;
if(a<=st && b>=dr)
{
rasp=maxim(rasp,val[nod]);
return;
}
if(st<dr)
{
int mij=(st+dr)/2;
search(2*nod,st,mij,a,b);
search(2*nod+1,mij+1,dr,a,b);
}
}
void read()
{
int n,m,x,a,b;
scanf("%d%d",&n,&m);
first(1,n,1);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
val[poz[i]]=x;
modif(poz[i]/2);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&x);
if(x==1)
{
scanf("%d%d",&a,&b);
val[poz[a]]=b;
modif(poz[a]/2);
continue;
}
scanf("%d%d",&a,&b);
rasp=0;
search(1,1,n,a,b);
printf("%d\n",rasp);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
read();
return 0;
}