#include <bits/stdc++.h>
#define nmax 300000
using namespace std;
int n,m,res;
int a[nmax];
inline void Update(int p,int x)
{
int t,mx;
p=n+p-1;a[p]=x;
while(p>0)
{
t=p/2;
mx=max(a[2*t],a[2*t+1]);
a[t]=mx;
p=t;
}
}
inline int Query(int p,int l,int r,int start,int finish)
{
int div;
if(l==start && r==finish)
return a[p];
div=(start+finish)>>1;
if (r<=div) return Query(2*p,l,r,start,div);
if (l>div) return Query(p*2+1,l,r,div+1,finish);
return max(Query(2*p,l,div,start,div),Query(p*2+1,div+1,r,div+1,finish));
}
inline void Input()
{
int i,opt,x,y,k=1;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin>>n>>m;
while(k<n) k*=2;
for (i=1; i<=n;i++)
{
fin>>x;
a[k+i-1]=x;
}
n=k;
for(i=n-1;i>=1;i--)
a[i]=max(a[2*i],a[2*i+1]);
for(i=1;i<=m;i++)
{
fin>>opt>>x>>y;
if(opt==1)
Update(x,y);
else
{
res=0;
fout<<Query(1,x,y,1,n)<<"\n";
}
}
fout.close();
}
int main()
{
Input();
return 0;
}