#include <bits/stdc++.h>
#define Nmax 100004
using namespace std;
ifstream f ("arbint.in");
ofstream g ("arbint.out");
int heap[Nmax*4],Max,n,t,i,x,a,b;
inline void insertHeap(int st,int dr,int nod,int val,int poz)
{
if(st == dr)
{
heap[nod] = val;
return;
}
int mij = (st + dr) / 2;
if(poz <= mij)
insertHeap(st,mij,2*nod,val,poz);
else insertHeap(mij + 1,dr,2*nod + 1,val,poz);
heap[nod] = max(heap[2*nod] , heap[2*nod + 1]);
}
void query(int st,int dr,int nod,int a,int b)
{
if(a <= st && dr <= b)
{
Max = max(Max,heap[nod]);
return;
}
int mij = (st + dr) / 2;
if(mij >= a)
query(st,mij,2*nod,a,b);
if(mij + 1 <= b)
query(mij + 1,dr,2*nod + 1,a,b);
}
int main()
{
f >> n >> t;
for(i = 1;i <= n;i++)
f >> x,insertHeap(1,n,1,x,i);
for(i = 1;i <= t;i++)
{
f >> x >> a >> b;
switch(x)
{
case 1:
insertHeap(1,n,1,b,a);
break;
case 0:
Max = -1;
query(1,n,1,a,b);
g << Max << '\n';
break;
}
}
return 0;
}