#include <iostream>
#include <fstream>
using namespace std;
int arb[300000];
int x;
void adauga(int stanga,int dreapta,int loc,int val,int careelemnt)
{
int mijloc;
int maxim=-1;
if (stanga==dreapta)
{
arb[loc]=val;
return;
}
else
{
mijloc=(stanga+dreapta)/2;
if (careelemnt<=mijloc){adauga(stanga,mijloc,loc*2,val,careelemnt);}
else{adauga(mijloc+1,dreapta,loc*2+1,val,careelemnt);}
arb[loc]=max(arb[loc*2],arb[loc*2+1]);
}
}
int daraspuns(int loc,int a,int b,int x,int y)
{
int mijloc=(a+b)/2;
int maxim=-9999999;
if (a>=x&&b<=y)
{
return arb[loc];
}
else
{
if (x<=mijloc)
{
maxim=max(maxim,daraspuns(loc*2,a,mijloc,x,y));
}
if (y>mijloc)
{
maxim=max(maxim,daraspuns(loc*2+1,mijloc+1,b,x,y));
}
return maxim;
}
}
int main()
{
ifstream in("arbint.in");
ofstream out("arbint.out");
int i,n,m,y,p;
in>>n;
in>>m;
for (i=1;i<=n;i++)
{
in>>x;
adauga(1,n,1,x,i);
}
for (i=1;i<=m;i++)
{
in>>p;
if (p==1)
{
in>>y;
in>>x;
adauga(1,n,1,x,y);
}
else
{
in>>x;
in>>y;
out<<daraspuns(1,1,n,x,y)<<"\n";
}
}
}