#include <cstdio>
#include <algorithm>
#define Nmax 4*100005
using namespace std;
int a[ Nmax ],p,x,N,M,A,B,ans;
void update(int li,int lf,int poz)
{
if(li == lf)
{
a[ poz ] = x;
return;
}
int m = (li + ((lf-li)>>1));
if(p <= m)
update( li , m , 2*poz );
else
update( m+1 , lf , 2*poz+1 );
a[ poz ] = max( a[ 2 * poz ] , a[ 2 * poz + 1 ]);
}
void querry(int li,int lf,int poz)
{
if(A <= li && lf <= B)
{
ans = max(ans,a[poz]);
return;
}
int m = li +((lf-li)>>1);
if( A <= m )
querry(li,m,2*poz);
if( B > m)
querry(m+1,lf,2*poz+1);
}
void make_aib()
{
scanf("%d%d",&N,&M);
for(int i = 1; i <= N; ++i)
{
scanf("%d",&x);
p = i;
update(1,N,1);
}
}
void solve_querry()
{
int op;
for(int i = 1; i <= M; ++i)
{
scanf("%d%d%d",&op,&A,&B);
if(op == 1)
{
x = B;
p = A;
update(1,N,1);
}
else
{
ans = -1;
querry(1,N,1);
printf("%d\n",ans);
}
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
make_aib();
solve_querry();
return 0;
}