#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
#define Nmax 4000013
int i,n,m,value,op,a;
int Stree[Nmax];
void update(int node, int st, int dr, int x, int y)
{
if (st>dr || x>dr || y<st) return ;
if (st>=x && dr<=y)
{
Stree[node]=value;
return;
}
update(node*2,st,(st+dr)/2,x,y);
update(node*2+1,(st+dr)/2+1,dr,x,y);
Stree[node]=max(Stree[node*2],Stree[node*2+1]);
}
int query(int node,int st,int dr,int x,int y)
{
if (st>dr || x>dr || y<st) return -1;
if (st>=x && dr<=y) return Stree[node];
return (max(query(node*2,st,(st+dr)/2,x,y),query(node*2+1,(st+dr)/2+1,dr,x,y)));
}
int main(void)
{
in>>n>>m;
for (i=1;i<=n;++i)
{
in>>value;
update(1,1,n,i,i);
}
while(m--)
{
in>>op>>a>>value;
if (op==0) out<<query(1,1,n,a,value)<<"\n";
if (op==1) update(1,1,n,a,a);
}
return 0;
}