#include <bits/stdc++.h>
#define int long long
using namespace std;
const int nmax=100003;
int sg[4*nmax];
void update(int x, int st, int dr, int poz, int val)
{
if(st==dr && st==poz){
sg[x]=val;
return;
}
if(st>poz || dr<poz)
{
return;
}
int md=(st+dr)/2;
int a, b;
update(2*x, st, md, poz, val);
update(2*x+1, md+1, dr, poz, val);
sg[x]=max(sg[2*x],sg[2*x+1]);
}
int querry(int x, int s, int d, int st, int dr)
{
if(s>=st && dr>=d) return sg[x];
if(s>dr || d<st) return -1e15;
int md=(s+d)/2;
return max(querry(2*x, s, md, st, dr),querry(2*x+1, md+1, d, st, dr));
}
signed main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, q, val, t, a, b;
cin>>n>>q;
for(int i=1; i<=n; i++)
{
cin>>val;
update(1, 1, n, i, val);
}
while(q--)
{
cin>>t>>a>>b;
if(t==1)
{
update(1, 1, n, a, b);
}
else
{
cout<<querry(1, 1, n, a, b)<<'\n';
}
}
return 0;
}