#include<fstream>
#define NMAX 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int N,M,V[4*NMAX],globala;
void Update(int left, int right, int var, int start, int node)
{
int mid=(left+right)/2;
if(left==right)
{
V[node]=var;
return;
}
if(start<=mid)
Update(left,mid,var,start,2*node);
else
Update(mid+1,right,var,start,(2*node)+1);
V[node]=max(V[2*node],V[2*node+1]);
}
void Read()
{
fin>>N>>M;
for(int i=1;i<=N;i++)
{
int var;
fin>>var;
Update(1,N,var,i,1);
}
}
void Query(int left, int right, int a, int b, int node)
{
int mid=(left+right)/2;
if(right<a || left>b)
return;
if(left>=a && right <=b)
{
globala=max(V[node],globala);
return;
}
Query(left,mid,a,b,2*node);
Query(mid+1,right,a,b,2*node+1);
}
void Solve()
{
int cer,a,b;
for(int i=1;i<=M;i++)
{
fin>>cer>>a>>b;
if(cer==0)
{
globala=0;
Query(1,N,a,b,1);
fout<<globala<<"\n";
}
else
Update(1,N,b,a,1);
}
}
int main()
{
Read();
Solve();
return 0;
}