50 50
75 71 23 37 28 23 69 75 5 62 3 11 96 100 13 50 57 51 8 90 4 6 84 27 11 89 95 81 10 62 48 52 69 87 97 95 30 74 21 42 36 64 31 80 81 50 56 53 33 99
26 30 5 33 35 29 6 15 36 17 32 16 14 1 29 34 22 40 12 42 38 48 39 50 13 47 18 43 10 8 49 45 11 31 21 37 46 28 20 41 2 7 9 24 27 23 3 44 15 14
 10 10
61 59 97 16 2 94 57 48 91 93
2 8 6 5 3 1 3 4 9 10
 2 1
1 2
1
 3 3
10 20 30
1 2 3
 50 60
86 57 45 93 17 12 40 10 47 80 18 80 3 9 6 55 13 99 5 76 4 70 100 55 27 91 71 3 65 93 41 74 80 56 90 50 58 13 71 9 47 52 26 73 72 21 15 81 88 28
40 32 5 16 49 23 3 17 14 10 1 15 1 21 28 22 13 45 12 25 44 48 46 32 36 43 11 8 49 7 7 35 10 14 39 4 42 10 30 27 1 17 31 15 8 41 44 33 25 26 19 18 29 37 50 6 36 38 47 9
 2 7
20 30
1 1 1 2 2 2 2
 2 2
10 12
2 1
 5 1
16 87 36 16 81
3
 2 3
20 30
1 1 1
 2 10
39 26
1 1 2 2 2 2 2 2 1 2

63929
 2137
 0
 40
 62514
 20
 12
 0
 0
 104

#include <bits/stdc++.h>
using namespace std;
long long int gcd(long long int a, long long int b) {
  long long int r, i;
  while (b != 0) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
long long int power(long long int x, long long int y, long long int mod) {
  long long int temp, ty, my;
  if (y == 0) return 1;
  temp = power(x, y / 2, mod);
  ty = (temp % mod) * (temp % mod);
  if (y % 2 == 0) {
    return ty % mod;
  } else {
    my = (x % mod) * (ty % mod);
    return my % mod;
  }
}
long long int mycbrt(long long int n) {
  long long int start = 0;
  long long int end = 1000000LL;
  long long int ans = -1;
  while (start <= end) {
    long long int mid = (start + end) / 2;
    if ((mid * mid * mid) > n)
      end = mid - 1;
    else if ((mid * mid * mid) == n) {
      ans = mid;
      break;
    } else {
      start = mid + 1;
    }
  }
  if (n == 1) {
    ans = 1;
  }
  return ans;
}
void SieveOfEratosthenes(int n) {
  bool prime[n + 1];
  memset(prime, true, sizeof(prime));
  for (int p = 2; p * p <= n; p++) {
    if (prime[p] == true) {
      for (int i = p * 2; i <= n; i += p) prime[i] = false;
    }
  }
  for (int p = 2; p <= n; p++)
    if (prime[p]) cout << p << " ";
}
struct abhi {
  long long int val1;
  long long int val2;
  long long int po;
};
bool cmp(struct abhi x, struct abhi y) {
  if (x.val1 == y.val1) return x.val2 < y.val2;
  return x.val1 < y.val1;
}
void fastscan(int &number) {
  bool negative = false;
  register int c;
  number = 0;
  c = getchar();
  if (c == '-') {
    negative = true;
    c = getchar();
  }
  for (; (c > 47 && c < 58); c = getchar()) number = number * 10 + c - 48;
  if (negative) number *= -1;
}
vector<pair<long long int, long long int> > po;
long long int dp[2000010];
long long int dp2[200010];
long long int ar[2000010];
long long int br[2000010];
long long int x[2000010];
long long int y[2000010];
deque<long long int> bc;
deque<long long int>::iterator it;
vector<pair<long long int, long long int> > poss;
map<pair<long long int, long long int>, long long int> mp;
vector<long long int> ans;
long long int vis[1000];
int main() {
  long long int n, i, j, k, s, q;
  long long int t, m;
  cin >> n >> m;
  for (i = (0); i < (n); i++) {
    cin >> ar[i + 1];
  }
  memset(vis, 0, sizeof(vis));
  for (i = (0); i < (m); i++) {
    cin >> br[i];
    if (vis[br[i]] == 0) {
      vis[br[i]] = 1;
      bc.push_back(br[i]);
    }
  }
  long long int ans = 0;
  for (i = (0); i < (m); i++) {
    long long int bno = br[i];
    long long int sum = 0;
    for (it = bc.begin(); it != bc.end(); it++) {
      long long int num = *it;
      if (num != bno) {
        sum = sum + ar[num];
      } else {
        bc.erase(it);
        bc.push_front(num);
        ans = ans + sum;
        break;
      }
    }
  }
  cout << ans << "\n";
  return 0;
}
