#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5 + 10;
const long long MOD = 998244353;
const int INF = 0x3f3f3f3f;
struct Node {
  int maxi;
  int tag;
} t[MAXN << 2];
int N;
int a[MAXN];
int pos[MAXN];
void pu(int id) { t[id].maxi = max(t[id << 1].maxi, t[id << 1 | 1].maxi); }
void pd(int id) {
  if (!t[id].tag) {
    return;
  }
  t[id << 1].maxi += t[id].tag;
  t[id << 1].tag += t[id].tag;
  t[id << 1 | 1].maxi += t[id].tag;
  t[id << 1 | 1].tag += t[id].tag;
  t[id].tag = 0;
}
void ud(int id, int l, int r, int x, int y, int val) {
  if (l >= x && r <= y) {
    t[id].maxi += val;
    t[id].tag += val;
    return;
  }
  int m = (l + r) >> 1;
  pd(id);
  if (x <= m) {
    ud(id << 1, l, m, x, y, val);
  }
  if (m < y) {
    ud(id << 1 | 1, m + 1, r, x, y, val);
  }
  pu(id);
}
void init() {
  for (int i = N << 2; i > 0; i--) {
    t[i].maxi = t[i].tag = 0;
  }
}
int main() {
  int now;
  int ans;
  while (~scanf("%d", &N)) {
    init();
    for (int i = 1; i <= N; i++) {
      scanf("%d", &now);
      pos[now] = i;
    }
    ud(1, 1, N, 1, pos[N], 1);
    ans = N;
    for (int i = 1; i <= N; i++) {
      scanf("%d", &now);
      printf("%d%c", ans, i == N ? '\n' : ' ');
      if (i == N) {
        break;
      }
      ud(1, 1, N, 1, now, -1);
      while (t[1].maxi <= 0) {
        ans--;
        ud(1, 1, N, 1, pos[ans], 1);
      }
    }
  }
  return 0;
}
