#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5, M = 1e8 + 5;
int n, q, a[N], vis[N], tr[M], ls[M], rs[M], dcnt, vv[N];
long long ans;
int lowbit(int x){
return x & -x;
}
void modify2(int l, int r, int id, int px, int x){
if(l > r || l < 1 || r > n)return;
if(l == r){
tr[id] += x;
return;
}
int mid = (l + r) >> 1;
if(px <= mid){
if(!ls[id])ls[id] = ++dcnt;
modify2(l, mid, ls[id], px, x);
}else{
if(!rs[id])rs[id] = ++dcnt;
modify2(mid + 1, r, rs[id], px, x);
}
tr[id] = tr[ls[id]] + tr[rs[id]];
}
int queryy2(int l, int r, int id, int pl, int pr){
if(l > pr || r < pl || l > r || l < 1 || r > n || id == 0)return 0;
if(l >= pl && r <= pr)return tr[id];
int mid = (l + r) >> 1;
return queryy2(l, mid, ls[id], pl, pr) + queryy2(mid + 1, r, rs[id], pl, pr);
}
void modify(int x, int y, int z){
if(x > n)return;
if(!vis[x])vis[x] = ++dcnt;
modify2(1, n, vis[x], y, z);
modify(x + lowbit(x), y, z);
}
int queryy(int x, int l, int r){
if(x <= 0)return 0;
return queryy(x - lowbit(x), l, r) + (vis[x] ? queryy2(1, n, vis[x], l, r) : 0);
}
int query(int x, int y, int x2, int y2){
x2 = min(x2, n);
x = max(x, 0);
if(x > x2)return 0;
return queryy(x2, y, y2) - queryy(x - 1, y, y2);
}
signed main(){
while(scanf("%d %d", &n, &q) == 2){
fill(&tr[0], &tr[dcnt] + 1, 0);
fill(&ls[0], &ls[dcnt] + 1, 0);
fill(&rs[0], &rs[dcnt] + 1, 0);
dcnt = 0;
ans = 0;
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
vis[i] = 0;
vv[a[i]] = i;
}
for(int i = 1; i <= n; i++){
modify(a[i], i, 1);
ans += query(a[i] + 1, 1, n, i - 1);
}
for(int i = 1, x, y; i <= q; i++){
printf("%lld \n", ans);
scanf("%d", &x);
x = vv[x];
ans -= query(a[x] + 1, 1, n, x - 1);
ans -= query(1, x + 1, a[x] - 1, n);
modify(a[x], x, -1);
}
}
return 0;
}