#include <bits/stdc++.h>
using namespace std;
template <class T>
void printvec(const vector<T>& v) {
  for (auto x : v) {
    cout << x << " ";
  }
  cout << endl;
}
template <class T>
void printtree(const vector<vector<T> >& tree) {
  for (long long i = 0; i < tree.size(); ++i) {
    cout << i + 1 << ": ";
    printvec(tree[i]);
  }
}
template <class T, class U>
void printmap(const map<T, U>& mp) {
  for (auto x : mp) {
    cout << x.first << "=>" << x.second << endl;
  }
}
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
const long long INF = 1e9;
const long long MOD = 1000000007;
class SegTree {
 public:
  SegTree(int _n) {
    n = 1;
    while (n < _n) {
      n *= 2;
    }
    n *= 2;
    add = vector<int>(2 * n - 1);
    t = vector<int>(2 * n - 1);
  }
  void update(int l, int r, int x) { _update(0, l, r, 0, n, x); }
  void _update(int v, int l, int r, int tl, int tr, int x) {
    if (tl >= r || tr <= l) {
      return;
    }
    if (tl >= l && tr <= r) {
      update_one(v, x);
    } else {
      if (add[v]) {
        update_one(v * 2 + 1, add[v]);
        update_one(v * 2 + 2, add[v]);
        add[v] = 0;
      }
      _update(v * 2 + 1, l, r, tl, (tl + tr) / 2, x);
      _update(v * 2 + 2, l, r, (tl + tr) / 2, tr, x);
      t[v] = min(t[v * 2 + 1], t[v * 2 + 2]);
    }
  }
  int query() { return t[0]; }

 private:
  void update_one(int v, int x) {
    add[v] += x;
    t[v] += x;
  }
  int n;
  vector<int> add;
  vector<int> t;
};
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  vector<int> p(n), q(n);
  vector<int> revP(n + 1);
  for (long long i = 0; i < n; ++i) {
    cin >> p[i];
    revP[p[i]] = i;
  }
  for (long long i = 0; i < n; ++i) {
    cin >> q[i];
    --q[i];
  }
  SegTree st(n);
  auto decrease = [&](int x) {
    st.update(0, revP[x] + 1, -1);
    if (st.query() >= 0) {
      return true;
    } else {
      st.update(0, revP[x] + 1, 1);
      return false;
    }
  };
  int x = n;
  for (long long i = 0; i < n; ++i) {
    while (decrease(x)) {
      --x;
    }
    cout << x;
    if (i < n - 1) {
      cout << ' ';
    }
    st.update(0, q[i] + 1, 1);
  }
}
