#include <cstdio>
#define file_in "arbint.in"
#define file_out "arbint.out"
#define Nmax 401000
int n,m,v[Nmax],i,maxim,a,b,Ai[Nmax],tip,p;
inline int max(int a, int b) { return a>b?a:b; }
void update(int nod, int ls,int ld, int val)
{
if (ls==ld)
{
Ai[nod]=val;
return ;
}
int mij=(ls+ld)>>1;
if (p<=mij)
update(2*nod,ls,mij,val);
else
update(2*nod+1,mij+1,ld,val);
Ai[nod]=max(Ai[2*nod],Ai[2*nod+1]);
}
void query(int nod, int ls, int ld)
{
if (a<=ls && ld<=b)
{
maxim=max(maxim,Ai[nod]);
return ;
}
int mij=(ls+ld)>>1;
if (a<=mij)
query(2*nod,ls,mij);
if (mij<b)
query(2*nod+1,mij+1,ld);
}
int main()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &n, &m);
for (i=1;i<=n;++i)
{
p=i;
scanf("%d", &v[i]);
update(1,1,n,v[i]);
}
while(m--)
{
scanf("%d %d %d", &tip, &a, &b);
if (tip==1)
{
p=a;
update(1,1,n,b);
}
else
{
maxim=-1;
query(1,1,n);
printf("%d\n", maxim);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}