#include <bits/stdc++.h>
#define maxn 200005
using namespace std;
int t[maxn], n, m, c[maxn];
struct node {
int a, b, ans;
}a1[maxn << 1];
bool cmp(node a, node b) {
if(a.a != b.a) return a.a < b.a;
return a.b < b.b;
}
bool cmp2(node a, node b) {
return a.b < b.b;
}
int lowbit(int x) {
return x & (-x);
}
int add(int x, int ad) {
while(x <= n) {
c[x] += ad;
x += lowbit(x);
}
}
int query(int x) {
int res = 0;
while(x) {
res += c[x];
x -= lowbit(x);
}
return res;
}
void cdq(int l, int r) {
if(l == r) return;
int mid = (l + r) >> 1;
cdq(l, mid);
cdq(mid + 1, r);
sort(a1 + l, a1 + mid + 1, cmp);
sort(a1 + mid + 1, a1 + r + 1, cmp);
int j = mid + 1, i = l;
while(i <= mid) {
while(a1[i].a > a1[j].a && j <= r) {
add(a1[j].b, 1);
j ++;
}
a1[i].ans += query(m + 1) - query(a1[i].b);
i ++;
}
while(i <= mid) {
while(a1[i].a > a1[j].a && j <= r) {
add(a1[j].b, -1);
j ++;
}
i ++;
}
// for(int p = mid + 1;p < j;p++) add(a1[p].b, -1);
j = r, i = mid;
while(j > mid) {
while(a1[j].a < a1[i].a && i >= l) {
add(a1[i].b, 1);
i --;
}
a1[j].ans += query(m + 1) - query(a1[j].b);
j --;
}
while(j < mid) {
while(a1[j].a < a1[i].a && i >= l) {
add(a1[i].b, -1);
i --;
}
j --;
}
// for(int p = mid;p > i;p --) add(a1[p].b, -1);
// sort(a1 + l, a1 + r + 1, cmp);
return;
}
int main() {
int res = 0;
scanf("%d%d", &n, &m);
for(int i = 1;i <= n;i++) {
scanf("%d", &a1[i].a);
t[a1[i].a] = i;
}
for(int i = 1;i <= m;i++) {
int x;
scanf("%d", &x);
a1[t[x]].b = i;
}
for(int i = 1;i <= n;i++) {
if(!a1[i].b) a1[i].b = m + 1;
}
for(int i = 1;i <= n;i++) {
res += query(n + 1) - query(a1[i].a);
add(a1[i].a, 1);
}
for(int i = 1;i <= n;i++) add(a1[i].a, -1);
cdq(1, n);
sort(a1 + 1, a1 + 1 + n, cmp2);
for(int i = 1;i <= m;i++) {
printf("%d\n", res);
res -= a1[i].ans;
}
}