#include<bits/stdc++.h>
#define lll long long
using namespace std;
const int MAXN=1e5+10;
struct dian
{
lll t,pos,zhi,ans;
}d[MAXN];
struct tree
{
lll kk,tre[MAXN];
void add(int x,int y)
{
for(;x<=kk;x+=x&-x)tre[x]+=y;
}
lll query(int x)
{
lll all=0;
for(;x;x-=x&-x)all+=tre[x];
return all;
}
}tt,t2;
lll n,m,all[MAXN],a[MAXN];
bool cmp1(dian x,dian y)
{
return x.pos<y.pos;
}
bool cmp2(dian x,dian y)
{
return x.zhi>y.zhi;
}
void CDQ(int l,int r)
{
if(l==r)return ;
int mid=(l+r)>>1;
CDQ(l,mid),CDQ(mid+1,r);
sort(d+l,d+mid+1,cmp2);
sort(d+mid+1,d+r+1,cmp2);
int ll=l,rr=mid+1;
while(rr<=r)
{
while(d[ll].zhi>d[rr].zhi&&ll<=mid) tt.add(d[ll++].t,1);
d[rr].ans+=tt.query(d[rr].t);
rr++;
}
for(int i=l;i<ll;i++){
tt.add(d[i].t,-1);
}
ll=mid,rr=r;
while(ll>=l)
{
while(d[rr].zhi<d[ll].zhi&&rr>mid) tt.add(d[rr--].t,1);
d[ll].ans+=tt.query(d[ll].t);
ll--;
}
for(int i=rr+1;i<=r;i++)
{
tt.add(d[i].t,-1);
}
}
int main()
{
cin>>n>>m;
tt.kk=n;
t2.kk=n;
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
a[i]=x;
d[x].zhi=x;
d[x].pos=i;
d[i].t=m+1;
}
for(int i=1;i<=m;i++)
{
int x;
scanf("%d",&x);
d[x].t=m-i+1;
}
lll q=0;
for(int i=n;i>=1;i--)
{
t2.add(a[i],1);
q+=t2.query(a[i]-1);
}
sort(d+1,d+1+n,cmp1);
CDQ(1,n);
for(int i=1;i<=n;i++)
{
all[d[i].t]+=d[i].ans;
}
for(int i=1;i<=m;i++)
{
printf("%lld\n",q);
q-=all[m-i+1];
}
return 0;
}