#include <bits/stdc++.h>
using namespace std;
int n, a[1005000];
int pos[1005000], t[4 * 1005000];
int get(int v, int tl, int tr, int l, int r) {
  if (tr < l || tl > r) {
    return 0;
  }
  if (l <= tl && tr <= r) {
    return t[v];
  }
  int tm = (tl + tr) >> 1;
  return max(get(v + v, tl, tm, l, r), get(v + v + 1, tm + 1, tr, l, r));
}
void update(int v, int tl, int tr, int ps, int val) {
  if (tl == tr) {
    t[v] = val;
    return;
  }
  int tm = (tl + tr) >> 1;
  if (ps <= tm) {
    update(v + v, tl, tm, ps, val);
  } else {
    update(v + v + 1, tm + 1, tr, ps, val);
  }
  t[v] = max(t[v + v], t[v + v + 1]);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int x;
    cin >> x;
    pos[x] = i;
  }
  for (int i = 1; i <= n; i++) {
    int x;
    cin >> x;
    a[pos[x]] = i;
  }
  for (int i = 1; i <= n; i++) {
    update(1, 1, n, a[i], get(1, 1, n, a[i] + 1, n) + 1);
  }
  cout << get(1, 1, n, 1, n);
  return 0;
}
