#include<fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int nmax = 100006;
int n, m, ai[4 * nmax], upoz, rasp;
void update(int st, int dr, int poz, int x)
{
int mid;
if(st==dr)
{
ai[poz] = x;
return ;
}
mid = (st + dr) / 2;
if(mid<upoz)
{
update(mid + 1, dr, 2 * poz + 1, x);
}
else
{
update(st, mid, 2 * poz, x);
}
ai[poz] = max(ai[2 * poz], ai[2 * poz + 1]);
}
void query(int stp, int drp, int st, int dr, int poz)
{
if(stp<=st && dr<=drp)
{
rasp = max(rasp, ai[poz]);
return ;
}
int mid = (st + dr) / 2;
if(mid>=stp)
{
query( stp, drp, st, mid, 2 * poz );
}
if (mid + 1<=drp)
{
query( stp, drp, mid + 1, dr, 2 * poz + 1 );
}
}
int main(){
int player_unu=0;
in>>n>>m;
for(int i = 1; i<=n; i++)
{
int x;
in>>x;
upoz = i;
update(1, n, 1, x);
}
for(int i = 1; i<=m; i++)
{
int op, a, b;
in>>op>>a>>b;
if(op==1)
{
upoz = a;
update(1, n, 1, b);
}
else
{
rasp = 0;
query(a, b, 1, n, 1);
out<<rasp<<'\n';
}
}
return player_unu;
}