#include <bits/stdc++.h>
using namespace std;
int sum[4 * 1000005];
int a[1000005], b[1000005], fck[1000005];
void build(int i, int l, int r) {
  if (l == r) {
    sum[i] = 0;
    return;
  } else {
    int m = (l + r) / 2;
    build(2 * i, l, m);
    build((2 * i) + 1, m + 1, r);
    sum[i] = 0;
    return;
  }
}
void update(int ind, int l, int r, int i, int val) {
  if (l == r) {
    sum[ind] = val;
    return;
  }
  int m = (l + r) / 2;
  if (i <= m) {
    update(2 * ind, l, m, i, val);
  } else {
    update((2 * ind) + 1, m + 1, r, i, val);
  }
  sum[ind] = max(sum[(2 * ind) + 1], sum[(2 * ind)]);
  return;
}
int max_query(int ind, int i, int j, int l, int r) {
  if (l > r) {
    return 0;
  }
  if (i == l && j == r) {
    return sum[ind];
  }
  int mid = (i + j) / 2;
  return max(max_query(ind * 2, i, mid, l, min(r, mid)),
             max_query((ind * 2) + 1, mid + 1, j, max(l, mid + 1), r));
}
int main() {
  int i, j, k, ans = 0, n;
  scanf("%d", &n);
  map<int, int> ma;
  for (i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    a[i]--;
  }
  for (i = 0; i < n; i++) {
    scanf("%d", &b[i]);
    b[i]--;
    ma[b[i]] = i;
  }
  for (i = 0; i < n; i++) {
    fck[i] = ma[a[i]];
  }
  build(1, 0, n - 1);
  for (i = 0; i < n; i++) {
    k = max_query(1, 0, n - 1, fck[i] + 1, n - 1);
    update(1, 0, n - 1, fck[i], k + 1);
    ans = max(ans, k + 1);
  }
  printf("%d", ans);
  return 0;
}
