#include <fstream>
using namespace std;
ifstream F("arbint.in");
ofstream G("arbint.out");
const int N = 100010;
int n,m;
#define m ((l+r)/2)
int a[N*4];
int go(int n,int l,int r,int k,int p,int t)
{
return t ? p < l || k > r ? 0 : k <= l && r <= p ? a[n] : max( go(n*2,l,m,k,p,1), go(n*2+1,m+1,r,k,p,1) ) : r < k || k < l ? a[n] : l == r ? a[n] = p : a[n] = max( go(n*2,l,m,k,p,0), go(n*2+1,m+1,r,k,p,0) );
}
#undef m
int main()
{
F>>n>>m;
for (int i=1,x;i<=n;++i)
F>>x, go(1,1,n,i,x,0);
for (int i=1,t,x,y;i<=m;++i)
{
F>>t>>x>>y;
if ( !t )
G<<go(1,1,n,x,y,1)<<'\n';
else
go(1,1,n,x,y,0);
}
}