#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
const unsigned gen_seed =
    std::chrono::system_clock::now().time_since_epoch().count();
std::mt19937_64 gen(gen_seed);
class stree {
 public:
  std::vector<int> t;
  int s;
  void build(std::vector<int>& a, int v, int tl, int tr) {
    if (v == 1) {
      t.resize(a.size() * 4);
      s = a.size();
    }
    if (tl == tr)
      t[v] = a[tl];
    else {
      int tm = (tl + tr) / 2;
      build(a, v * 2, tl, tm);
      build(a, v * 2 + 1, tm + 1, tr);
      t[v] = t[v * 2] + t[v * 2 + 1];
    }
  }
  void set(int v, int tl, int tr, int pos, int val) {
    if (pos == tl && tr == pos) {
      t[v] = val;
    } else {
      int tm = (tl + tr) / 2;
      if (pos <= tm)
        set(v * 2, tl, tm, pos, val);
      else
        set(v * 2 + 1, tm + 1, tr, pos, val);
      t[v] = t[v * 2] + t[v * 2 + 1];
    }
  }
  int get(int v, int tl, int tr, int l, int r) {
    if (l > r) return 0;
    if (tl == l && tr == r) return t[v];
    int tm = (tl + tr) / 2;
    return get(v * 2, tl, tm, l, min(r, tm)) +
           get(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
  }
};
stree st;
std::vector<int> bad;
std::vector<int> a, pos;
int n;
void upd(int i) {
  if (i == -1 || i == n - 1) return;
  int was = bad[i];
  int cur = 0;
  if (pos[i] > pos[i + 1]) cur = 1;
  if (was != cur) {
    bad[i] = cur;
    st.set(1, 0, n - 2, i, cur);
  }
}
int main() {
  scanf("%d", &n);
  a.resize(n);
  pos.resize(n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    a[i]--;
    pos[a[i]] = i;
  }
  bad = std::vector<int>(n - 1, 0);
  for (int i = 0; i < n - 1; i++)
    if (pos[i] > pos[i + 1]) bad[i] = 1;
  st.build(bad, 1, 0, n - 2);
  int q;
  scanf("%d", &q);
  for (int i = 0; i < q; i++) {
    int t, l, r;
    scanf("%d %d %d", &t, &l, &r);
    l--;
    r--;
    if (t == 1)
      printf("%d\n", st.get(1, 0, n - 2, l, r - 1) + 1);
    else {
      swap(a[l], a[r]);
      pos[a[l]] = l;
      pos[a[r]] = r;
      upd(a[l] - 1);
      upd(a[l]);
      upd(a[r] - 1);
      upd(a[r]);
    }
  }
}
