#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5,M=3e7+5;
int n,m,idx,ans;
int a[N],pos[N],rt[N],t[M],ls[M],rs[M];
inline int lowbit(int x)
{
return x&-x;
}
void init()
{
memset(rt,0,sizeof rt);
memset(t,0,sizeof t);
memset(ls,0,sizeof ls);
memset(rs,0,sizeof rs);
}
void upd(int& k,int l,int r,int pos,int val)
{
if (!k)
k=++idx;
t[k]+=val;
if (l==r)
return;
int mid=l+r>>1;
if (pos<=mid)
upd(ls[k],l,mid,pos,val);
else
upd(rs[k],mid+1,r,pos,val);
}
int query(int l,int r,int x,int op)
{
int st1[N],st2[N],top1=0,top2=0,res=0;
for (int i=l-1; i; i-=lowbit(i))
st1[++top1]=rt[i];
for (int i=r; i; i-=lowbit(i))
st2[++top2]=rt[i];
l=1,r=n;
while (l!=r)
{
int mid=l+r>>1;
if (x>mid)
{
if (op)
{
for (int i=1; i<=top1; i++)
res-=t[ls[st1[i]]];
for (int i=1; i<=top2; i++)
res+=t[ls[st2[i]]];
}
for (int i=1; i<=top1; i++)
st1[i]=rs[st1[i]];
for (int i=1; i<=top2; i++)
st2[i]=rs[st2[i]];
l=mid+1;
}
else
{
if (!op)
{
for (int i=1; i<=top1; i++)
res-=t[rs[st1[i]]];
for (int i=1; i<=top2; i++)
res+=t[rs[st2[i]]];
}
for (int i=1; i<=top1; i++)
st1[i]=ls[st1[i]];
for (int i=1; i<=top2; i++)
st2[i]=ls[st2[i]];
r=mid;
}
}
return res;
}
signed main()
{
while(scanf("%lld%lld",&n,&m)!=EOF)
{
init();
for (int i=1; i<=n; i++)
{
scanf("%lld",a+i);
pos[a[i]]=i;
ans+=query(1,i-1,a[i],0);
for (int j=i; j<=n; j+=lowbit(j))
upd(rt[j],1,n,a[i],1);
}
printf("%lld\n",ans);
for (int i=1; i<m; i++)
{
int num;
scanf("%lld",&num);
ans-=query(1,pos[num]-1,num,0)+query(pos[num]+1,n,num,1);
printf("%lld\n",ans);
for (int j=pos[num]; j<=n; j+=lowbit(j))
upd(rt[j],1,n,num,-1);
}
}
return 0;
}