#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> a;
int n,m,poz,q,x,y,i;
void adaug (int nod, int st, int dr, int pz, int val)
{
int m;
m = (st + dr)/2;
if ( st == dr) a.at(nod)=val;
else
{
if (pz <= m) adaug(2*nod,st,m,pz,val);
else adaug(2*nod+1,m+1,dr,pz,val);
a.at(nod) = max ( a.at(2*nod), a.at(2*nod+1) );
}
}
int caut (int nod, int st, int dr, int de_unde, int pana_unde)
{
if (de_unde <= st && pana_unde >=dr) return a.at(nod);
else
{
int p1,p2,m;
m = (st+dr)/2;
p1 = p2 = 0;
if (de_unde<=m) p1 = caut (2*nod,st,m,de_unde,pana_unde);
if (pana_unde>m) p2 = caut (2*nod+1,m+1,dr,de_unde,pana_unde);
return max (p1,p2);
}
}
int main()
{
freopen ("arbint.in","r",stdin);
freopen ("arbint.out","w",stdout);
scanf ("%d %d",&n,&m);
a.resize(4*n+2,0);
for (i=1; i<=n; i++)
{
scanf("%d",&x);
adaug (1,1,n,i,x);
}
for (i=1; i<=m; i++)
{
scanf ("%d %d %d",&q,&x,&y);
if (q) adaug(1,1,n,x,y);
else printf ("%d\n",caut (1,1,n,x,y));
}
return 0;
}