#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
int ar[400000], a[100000];
void construire(int st, int dr, int x)
{
if(st==dr)
{
ar[x]=a[st];
return;
}
int mij=(st+dr)/2;
construire(st, mij, x*2);
construire(mij+1, dr, x*2+1);
ar[x]=max(ar[x*2], ar[x*2+1]);
}
void schimbare(int st, int dr, int x, int poz, int v)
{
if(st > dr)
return;
if(st==dr)
{
ar[x]=v;
return;
}
int mij=(st+dr)/2;
if(poz<=mij)
schimbare(st, mij, 2*x, poz, v);
else
schimbare(mij+1, dr, 2*x+1, poz, v);
ar[x] = max(ar[2*x], ar[2*x+1]);
}
int maxim(int st, int dr, int x, int pozInceput, int pozFinal)
{
if(st>=pozInceput && dr<=pozFinal)
return ar[x];
if(pozFinal<st || pozInceput>dr)
return -999999;
int mij=(st+dr)/2;
return max(maxim(st, mij, x*2, pozInceput, pozFinal), maxim(mij+1, dr, x*2+1, pozInceput, pozFinal));
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
f>>a[i];
construire(1, n, 1);
for(int t=0; t<m; t++)
{
int p, x, y;
f>>p>>x>>y;
if(p==0)
g<<maxim(1, n, 1, x, y)<<endl;
//else
if(p==1)
{
schimbare(1, n, 1, x, y);
/* for(int i=1; i<=15; i++)
g<<ar[i]<<' ';
g<<endl;*/
}
}
return 0;
}