#include <fstream>
#define nmax 400009
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int N,M;
int MaxArb[nmax];
inline int maxim(int a,int b){if(a>b)return a;return b;}
void update(int nod,int l,int r,int p,int val)
{
if(l==r)
{
MaxArb[nod]=val;
return;
}
int m = (l+r)/2;
if(p<=m)update(2*nod,l,m,p,val);
else update(2*nod+1,m+1,r,p,val);
MaxArb[nod]=maxim(MaxArb[2*nod],MaxArb[2*nod+1]);
}
int query(int nod,int l,int r,int a,int b)
{
int m,t=-1;
if(a<=l&&b>=r)
t = MaxArb[nod];
else
{
m=(l+r)/2;
if(a<=m)
t=query(2*nod,l,m,a,b);
if(m<b)
t=maxim(t,query(2*nod+1,m+1,r,a,b));
}
return t;
}
int main()
{
int i,a,b;
in>>N>>M;
for(i=1;i<=N;i++)
in>>a,update(1,1,N,i,a);
while(M--)
{
in>>i>>a>>b;
if(!i)
{
out<<query(1,1,N,a,b)<<'\n';
}
else
{
update(1,1,N,a,b);
}
}
return 0;
}