#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int arbint[600000];
void Actualizeaza(int nod, int st, int dr,int val, int poz)
{
if(st == dr)
{
arbint[nod] = val;
return;
}
int mijl = (st + dr)/2;
if(poz <= mijl)
Actualizeaza(2*nod, st, mijl, val, poz);
else
Actualizeaza(2*nod + 1, mijl + 1, dr, val, poz);
arbint[nod] = max(arbint[2*nod], arbint[2*nod + 1]);
}
void Interogare(int nod, int st, int dr, int start, int stop, int &ma)
{
if(st >= start && dr <= stop)
{
if(ma < arbint[nod])
{
ma = arbint[nod];
}
return;
}
int mijl = (st + dr)/2;
if(start <= mijl)
Interogare(2*nod, st, mijl, start, stop, ma);
if(mijl < stop)
Interogare(2*nod+1, mijl+1, dr, start, stop, ma);
}
int main()
{
int n,m;
int op, x, y;
in>>n>>m;
for(int i = 0; i<n; i++)
{
in>>x;
Actualizeaza(1,1,n,x,i+1);
//arbint[i];
}
int ma = -1;
while(m)
{
in>>op>>x>>y;
switch(op)
{
case 0:
ma = -1;
Interogare(1, 1, n, x, y, ma);
out<<ma<<"\n";
break;
case 1:
Actualizeaza(1,1,n,y,x); //pe poz y se pune val x
break;
}
m--;
}
return 0;
}