#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
int n, k, v[N], x, y, seg[N << 2], BIT[N];
bool need[N];
void add(int idx, int val) {
  while (idx <= n) {
    BIT[idx] += val;
    idx += idx & -idx;
  }
}
int get(int idx) {
  int ret = 0;
  while (idx) {
    ret += BIT[idx];
    idx -= idx & -idx;
  }
  return ret;
}
void build(int node, int s, int e) {
  if (s > e) {
    seg[node] = 0;
    return;
  }
  if (s == e) {
    seg[node] = s;
    return;
  }
  build(node * 2, s, (s + e) / 2);
  build(node * 2 + 1, (s + e) / 2 + 1, e);
  seg[node] = v[seg[node * 2]] < v[seg[node * 2 + 1]] ? seg[node * 2]
                                                      : seg[node * 2 + 1];
}
void update(int node, int s, int e) {
  if (s > e || x > e || x < s) return;
  if (s == e) {
    v[s] = 1 << 30;
    return;
  }
  update(node * 2, s, (s + e) / 2);
  update(node * 2 + 1, (s + e) / 2 + 1, e);
  seg[node] = v[seg[node * 2]] < v[seg[node * 2 + 1]] ? seg[node * 2]
                                                      : seg[node * 2 + 1];
}
int get(int node, int s, int e) {
  if (s > e || x > e || y < s) return 0;
  if (s >= x && e <= y) return seg[node];
  int a = get(node * 2, s, (s + e) / 2);
  int b = get(node * 2 + 1, (s + e) / 2 + 1, e);
  if (v[a] < v[b]) return a;
  return b;
}
long long solve(int s, int e) {
  if (s > e) return 0;
  x = s;
  y = e;
  int idx;
  long long res = 0;
  while (true) {
    idx = get(1, 1, n);
    if (v[idx] == (1 << 30)) break;
    if (need[v[idx]]) return res + solve(s, idx - 1) + solve(idx + 1, e);
    res += get(e) - get(s - 1);
    add(idx, -1);
    x = idx;
    update(1, 1, n);
    x = s;
  }
  return res;
}
int main() {
  scanf("%d%d", &n, &k);
  v[0] = 1 << 30;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", v + i);
    add(i, 1);
  }
  for (int i = 1; i <= k; ++i) {
    scanf("%d", &x);
    need[x] = true;
  }
  build(1, 1, n);
  printf("%I64d\n", solve(1, n));
  return 0;
}
