#include <fstream>
using namespace std;
ifstream fin("arbori.in");
ofstream fout("arbori.out");
int aint[300005],n,m,i,p,a,b,v[100005],k,q,ct;
int question(int nod,int x,int y,int st,int dr)
{int mid;
if(x==st&&y==dr)return aint[nod];
mid=(st+dr)>>1;
if(y<=mid)return question(nod*2,x,y,st,mid);
if(x>=mid+1)return question(nod*2+1,x,y,mid+1,dr);
return max(question(nod*2,x,mid,st,mid),question(nod*2+1,mid+1,y,mid+1,dr));
}
void update(int a,int b)
{int t;
t=k+a-1;
aint[t]=b;
t=t/2;
while(t!=0)
{aint[t]=max(aint[t*2],aint[t*2+1]);
t=t/2;
}
}
int main()
{fin>>n>>m;
for(i=1;i<=n;i++)
{fin>>v[i];
}
k=1;
while(k<n)
k=k*2;
for(i=k;i<k+n;i++)
{aint[i]=v[i-k+1];
}
for(i=k-1;i>=1;i--)
{aint[i]=max(aint[i*2],aint[i*2+1]);
}
q=1;
ct=0;
for(i=1;i<k+n;i++)
{ct++;
if(ct==q){ct=0;q=q*2;}
}
for(i=1;i<=m;i++)
{fin>>q>>a>>b;
if(q==0) fout<<question(1,a,b,1,k)<<"\n";
else update(a,b);
}
}