#include <bits/stdc++.h>
using namespace std;
struct BIT {
  vector<int> tree;
  BIT(int n) : tree(n + 1) {}
  int sum(int pos) {
    ++pos;
    int ret = 0;
    while (pos > 0) {
      ret += tree[pos];
      pos &= (pos - 1);
    }
    return ret;
  }
  void add(int pos, int val) {
    ++pos;
    while (pos < tree.size()) {
      tree[pos] += val;
      pos += (pos & -pos);
    }
  }
  int getRangeSum(int pos1, int pos2) { return sum(pos2) - sum(pos1 - 1); }
};
int N, K;
vector<pair<int, int> > dat;
bool final[1000010];
set<int> ind;
long long solve() {
  BIT itree(N + 10);
  for (int i = 0; i < N; i++) itree.add(i, 1);
  long long ret = 0;
  for (int i = 0; i < dat.size(); i++) {
    if (final[dat[i].first])
      ind.insert(dat[i].second);
    else {
      set<int>::iterator it, lo, hi;
      it = ind.lower_bound(dat[i].second);
      lo = it;
      lo--;
      hi = it;
      ret += itree.getRangeSum(*lo + 1, *hi - 1);
      itree.add(dat[i].second, -1);
    }
  }
  return ret;
}
int main() {
  scanf("%d%d", &N, &K);
  for (int i = 0; i < N; i++) {
    int val;
    scanf("%d", &val);
    dat.push_back(make_pair(val - 1, i));
  }
  for (int i = 0; i < K; i++) {
    int val;
    scanf("%d", &val);
    final[val - 1] = true;
  }
  sort(dat.begin(), dat.end());
  ind.insert(-1);
  ind.insert(N);
  long long ans = solve();
  printf("%I64d\n", ans);
  return 0;
}
