#include <bits/stdc++.h>
using namespace std;
#define RR 50003
//#define CC 250000
#define N 50003
#define oo 1000000000
#define pp pair<int,int>
#define RRR ios_base::sync_with_stdio(false);cin.tie(0);
int ar[4*200001];
int val[200001];
void build(int node, int s, int e)
{
if (s == e)
{
ar[node] = val[s];
}else
{
int mid = (s+e) / 2;
build(2*node,s,mid);
build(2*node+1,mid+1,e);
ar[node] = max(ar[node*2] , ar[node*2+1]);
}
}
void update(int node, int s,int e,int idx, int v)
{
if (s == e)
{
// val[idx]=v;
ar[node]=v;
}else
{
int mid = (s+e)/2;
if (idx <= mid) update(2*node,s,mid,idx,v);
else
update(2*node+1,mid+1,e,idx,v);
ar[node] = max(ar[2*node] , ar[2*node+1]);
}
}
int maxim = -1;
void query(int node, int s, int e,int l, int r)
{
if (l <= s and e <= r)
{
if (maxim < ar[node]) maxim = ar[node];
return ;
}
int mid = (s+e)/2;
if (l<=mid) query(node*2,s,mid,l,r);
if (r>mid) query(node*2+1,mid+1,e,l,r);
}
int main()
{
RRR
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int m,n;
cin >> n >> m;
for (int i=1;i<=n;i++)
{
cin >> val[i];
update(1,1,n,i,val[i]);
}
// build(1,1,n);
for (int i=0;i<m;i++)
{
int a,b,c;
cin >> a >> b >> c;
if (a == 0)
{
maxim = -1;
query(1,1,n,b,c);
cout << maxim<<"\n";
}
else update(1,1,n,b,c);
}
return 0;
}