#include <iostream>
#include <fstream>
#define inf (1<<30) // 1*2^30
#define nmax 100010
using namespace std;
int T[4*nmax],sol;
int max(int a, int b)
{
if (a>b) return a;
return b;
}
void add(int i,int st, int dr, int p, int val)
{
if (st==dr) T[i]=val;
else{
int mid=(st+dr)/2;
if (mid+1<=p) add(2*i+1,mid+1,dr,p,val);
else add(2*i,st,mid,p,val);
T[i]=max(T[2*i],T[2*i+1]);
}
}
void show(int i, int st, int dr, int a, int b)
{
if (a<=st && dr<=b) sol=max(sol,T[i]);
else
{
int mid=(st+dr)/2;
if (a<=mid) show(2*i,st,mid,a,b);
if(mid+1<=b) show(2*i+1,mid+1,dr,a,b);
}
}
int main()
{
for(int i=1; i<=4*nmax;i++)
T[i]=-inf;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,a,b,x,act;
f >> n >> m;
for(int i=1; i<=n; i++)
{
f >> x;
add(1,1,n,i,x);
}
for(int i=1; i<=m; i++)
{
f >> act >> a >> b;
if (act==0)
{
sol=-inf;
show(1,1,n,a,b);
g << sol << "\n";
}else{
add(1,1,n,a,b);
}
}
f.close();
g.close();
return 0;
}