#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&-x)
int qread()
{
int res=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') f*=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
res=res*10+ch-'0';
ch=getchar();
}
return res;
}
struct point
{
int a,b,res;
}s[100010];
bool cmp(point x,point y)
{
return x.a>y.a;
}
bool cmp2(point x,point y)
{
return x.b>y.b;
}
bool cmp3(point x,point y)
{
return x.a<y.a;
}
int n,m;
int hmap[100010],tree[200010];
void add(int x,int num)
{
while(x<=100000)
{
tree[x]+=num;
x+=lowbit(x);
}
}
int query(int x)
{
int res=0;
while(x)
{
res+=tree[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(s+l,s+mid+1,cmp);
sort(s+mid+1,s+r+1,cmp);
int i=mid+1,j=l;
for(;i<=r;i++)
{
while(j<=mid&&s[i].a<s[j].a)
{
add(s[j].b,1);
j++;
}
s[i].res+=query(s[i].b);
}
for(i=l;i<j;i++) add(s[i].b,-1);
i=l,j=mid+1;
sort(s+l,s+mid+1,cmp3);
sort(s+mid+1,s+r+1,cmp3);
for(;i<=mid;i++)
{
while(j<=r&&s[i].a>s[j].a)
{
add(s[j].b,1);
j++;
}
s[i].res+=query(s[i].b);
}
for(i=mid+1;i<j;i++) add(s[i].b,-1);
}
int ans;
void ni()
{
for(int i=1;i<=n;i++)
{
ans+=query(s[i].a);
add(s[i].a,1);
}
for(int i=1;i<=n;i++) add(s[i].a,-1);
}
int main()
{
n=qread(),m=qread();
for(int i=1;i<=n;i++)
{
s[i].a=qread();
s[i].b=1;
hmap[s[i].a]=i; //数字映射的位置
}
ni();
for(int i=1;i<=m;i++)
{
int k=qread();
s[hmap[k]].b=m-i+2;
}
cdq(1,n);
sort(s+1,s+n+1,cmp2);
for(int i=1;i<=m;i++)
{
printf("%d\n",ans);
ans-=s[i].res;
}
return 0;
}
只过了样例