#include <iostream>
#include <fstream>
const int N=1000004;
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, a[N],v[N], op, m1, m2, maxi;
void constructie( int s, int d, int nr)
{
if(s == d)
v[nr] = a[d];
else
{
int mijl = (s + d) / 2;
constructie(s, mijl, nr*2);
constructie(mijl+1, d, nr*2+1);
if(v[2*nr] > v[2*nr + 1])
v[nr] = v[2*nr];
else
v[nr] = v[2*nr + 1];
}
}
void operatie0(int nr,int s,int d,int pozitie)
{
if(s==d)
{
v[nr]=a[s];
return;
}
else{
int mijl = (s + d) / 2;
if(pozitie <= mijl)
operatie0(nr * 2, s , mijl, pozitie);
else
operatie0(nr * 2 +1, mijl+ 1, d, pozitie);
if(v[2*nr] > v[2*nr + 1])
v[nr] = v[2*nr];
else
v[nr] = v[2*nr + 1];
}
}
void operatie1(int nr,int s,int d,int x,int y)
{
if(x<=s && y>=d)
{
if(maxi<v[nr])
maxi=v[nr];
}
else
{
int mijl=(s+d)/2;
if(x<=mijl) operatie1(nr*2,s,mijl,x,y);
if(y>mijl) operatie1(nr*2+1,mijl+1,d,x,y);
}
}
int main()
{
f >> n >> m;
for(int i=1; i<=n; i++)
f >> a[i];
constructie(1,n,1);
for(int i=0; i<m; i++)
{
f >> op >> m1 >> m2;
if(op == 0)
{
maxi = 0;
operatie1(1, 1,n, m1, m2);
g << maxi << '\n';
}
else
{
a[m1] = a[m2];
operatie0(1, 1, n , m1);
}
}
return 0;
}