//#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
vector <int> x;
long long n,i,j,k,a,b,m,t,maxi;
void berak (int bal, int jobb, int gyoker, int poz, int a)
{
if (bal==jobb)
{
x[gyoker]=a;
return;
}
int kozep=(bal+jobb)/2;
if (poz<=kozep) berak(bal,kozep,2*gyoker,poz,a);
else berak(kozep+1,jobb,2*gyoker+1,poz,a);
x[gyoker]=max(x[2*gyoker],x[2*gyoker+1]);
if (x[2*gyoker]>x[2*gyoker+1]) x[gyoker]=x[2*gyoker];
}
void leker (int bal, int jobb, int gyoker, int a, int b)
{
if (a<=bal && jobb<= b)
{
if (maxi< x[gyoker]) maxi=x[gyoker];
return;
}
int kozep=(jobb+bal)/2;
if (a<=kozep) leker(bal,kozep,2*gyoker,a,b);
if (kozep<b) leker(kozep+1,jobb,2*gyoker+1,a,b);
}
int main()
{
cin>>n>>m;
x.resize(4*n+1);
for (i=1;i<=n;++i)
{
cin>>a;
berak(1,n,1,i,a);
}
for (j=1;j<=m;++j)
{
cin>>t>>a>>b;
if (t==1)
{
berak(1,n,1,a,b);
}
else
{
maxi=-99999;
leker(1,n,1,a,b);
cout<<maxi<<"\n";
}
}
return 0;
}