#include <fstream>
#define nmax 100001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[5*nmax],n;
int maxim(int a,int b)
{
if(a>b) return a;
else return b;
}
void change(int p, int v, int s, int d, int c) //pozitie dorita, valoare noua, stanga, dreapta, numar nod curent
{
if(s==d) { arb[c]=v; return; }
int m=(s+d)/2;
if(p<=m) change(p,v,s,m,2*c);
else change(p,v,m+1,d,2*c+1);
arb[c]=maxim(arb[2*c],arb[2*c+1]);
}
int query(int a,int b, int s, int d, int c) //[a,b] intervalul dorit, [s,d] intervalul curent c
{
if( a<=s && d<=b ) return arb[c];
int m=(s+d)/2;
if(b<=m) return query(a,b,s,m,2*c);
else if(a>m) return query(a,b,m+1,d,2*c+1);
else return maxim(query(a,b,s,m,2*c),query(a,b,m+1,d,2*c+1));
}
int main()
{
int m,i,x,a,b;
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>x;
change(i,x,1,n,1);
}
for(i=1;i<=m;i++)
{
f>>x; f>>a>>b;
if(!x)
g<<query(a,b,1,n,1)<<"\n";
else change(a,b,1,n,1);
}
}