#include <bits/stdc++.h>
using namespace std;
const int N = (int)3e5 + 50;
struct node {
  int sum, suf;
  void add(int val) {
    sum += val;
    suf = max(sum, 0);
  }
};
node merge(node L, node R) {
  return {L.sum + R.sum, max(R.sum + L.suf, R.suf)};
}
struct Tree {
  node dat[4 * N];
  void init(int n) { fill(dat, dat + 4 * n, node{0, 0}); }
  void update(int pos, int x, int l, int r, int val) {
    if (l == r) {
      dat[x].add(val);
      return;
    }
    int mid = (l + r) / 2;
    if (pos <= mid)
      update(pos, 2 * x + 1, l, mid, val);
    else
      update(pos, 2 * x + 2, mid + 1, r, val);
    dat[x] = merge(dat[2 * x + 1], dat[2 * x + 2]);
  }
} tree;
int n;
int loc[N];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  tree.init(n);
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    x--;
    loc[x] = i;
  }
  int cur = n - 1;
  for (int i = 0; i < n; i++) {
    while (cur >= 0 && tree.dat[0].suf == 0) {
      tree.update(loc[cur--], 0, 0, n - 1, 1);
    }
    cout << cur + 2 << " ";
    int q;
    cin >> q;
    q--;
    tree.update(q, 0, 0, n - 1, -1);
  }
}
