#include <bits/stdc++.h>
#define int long long
using namespace std;
inline constexpr int lb(int x) { return x & -x; }
struct segmant
{
struct node
{
int val = 0, l = 0, r = 0;
node(int val = 0, int l = 0, int r = 0) : val(val), l(l), r(r) {}
};
vector<node> tr;
int rt;
segmant() : tr(1) { rt = addn(0); }
inline int addn(int va = 0)
{
tr.emplace_back(va);
auto sz = tr.size();
return sz - 1;
}
inline void update(int x) { tr[x].val = tr[tr[x].l].val + tr[tr[x].r].val; }
inline int incr(int x, int l, int r, int p, int v)
{
if (!x)
x = addn();
if (l == r)
return tr[x].val += v, x;
int m = (l + r) >> 1;
if (p <= m)
tr[x].l = incr(tr[x].l, l, m, p, v);
else
tr[x].r = incr(tr[x].r, m + 1, r, p, v);
update(x);
return x;
}
inline int query(int x, int l, int r, int L, int R)
{
if (!x)
return 0;
if (L <= l && r <= R)
return tr[x].val;
int m = (l + r) >> 1;
if (R <= m)
return query(tr[x].l, l, m, L, R);
else if (L > m)
return query(tr[x].r, m + 1, r, L, R);
return query(tr[x].l, l, m, L, R) + query(tr[x].r, m + 1, r, L, R);
}
};
struct bit2
{
int n;
vector<segmant> tr;
bit2(int n) : n(n), tr(n + 1) {}
inline void incr(int p, int x, int v)
{
for (int i = p; i <= n; i += lb(i))
tr[i].incr(tr[i].rt, 1, n, x, v);
}
inline int query(int p, int L, int R)
{
int ans = 0;
for (int i = p; i; i -= lb(i))
ans += tr[i].query(tr[i].rt, 1, n, L, R);
return ans;
}
};
template <typename T>
inline void fr(T &num)
{
num = 0;
short sign = 1;
char ch = std::getchar();
while (ch < '0' || ch > '9')
{
if (ch == '-')
sign = -1;
ch = std::getchar();
}
while (ch >= '0' && ch <= '9')
num = num * 10 + ch - '0', ch = getchar();
num = num * sign;
}
template <typename T>
inline void fw(T x)
{
if (x < 0)
std::putchar('-'), x = -x;
if (x > 9)
fw(x / 10);
std::putchar(x % 10 + '0');
}
signed main()
{
int n, m;
fr(n), fr(m);
bit2 bt2(n);
int ans = 0;
vector<int> ulk(n + 1);
for (int i = 1; i <= n; i++)
{
int x;
fr(x);
bt2.incr(i, x, 1);
ans += bt2.query(n, x + 1, n);
ulk[x] = i;
}
for (int i = 1; i <= m; i++)
{
fw(ans), putchar('\n');
int x;
fr(x);
ans -= bt2.query(ulk[x] - 1, x + 1, n);
ans -= (bt2.query(n, 1, x - 1) - bt2.query(ulk[x], 1, x - 1));
bt2.incr(ulk[x], x, -1);
}
return 0;
}