#include<bits/stdc++.h>
#define M 10
using namespace std;
typedef complex<double> P;
typedef pair<P,P> L;
const double EPS = 1e-8;

double dot(P a, P b){ return real(conj(a)*b); }

double cross(P a, P b){ return imag(conj(a)*b); }

int ccw(P a, P b, P c){
  b -= a;
  c -= a;
  if(cross(b,c) > EPS) return 1;   // ????????????(b-a)????????´???????????????(c-a)????????¨?????????
  if(cross(b,c) < -EPS) return -1; // ????????????(b-a)????????´???????????????(c-a)????????¨?????????
  if(dot(b,c) < -EPS) return 2;
  if(norm(b) < norm(c)) return -2;
  return 0;
}

P crossPoint(L l, L m){
  double A = cross(l.second - l.first, m.second - m.first);
  double B = cross(l.second - l.first, l.second - m.first);
  if(fabs(A) < EPS && fabs(B) < EPS) return m.first;
  else if(fabs(A) >= EPS) return m.first + B / A * (m.second - m.first);
}

vector<P> convex_cut(vector<P> G, L l){
  vector<P> ans;
  for(int i=0;i<G.size();i++){
    P A = G[i];
    P B = G[(i+1)%G.size()];
    if(ccw(l.first, l.second, A) != -1) ans.push_back(A);
    if(ccw(l.first, l.second, A) * ccw(l.first, l.second, B) < 0)
      ans.push_back(crossPoint(L(A,B), l));
  }
  return ans;
}

double area(vector<P> v){
  double sum = 0.0;
  int n = v.size();
  for(int i=0;i<n;i++) sum += (real(v[i]) - real(v[(i+1)%n])) * (imag(v[i]) + imag(v[(i+1)%n]));
  return fabs(sum) / 2;
};

int n,m,x,y,cx,cy;
vector<P> vi;
P c[M];

int main(){
  while(1){
    cin>>n>>m;
    if(!n&&!m)break;
    for(int i=0;i<n;i++){
      cin>>x>>y;
      vi.push_back(P(x,y));
    }
    for(int i=0;i<m;i++){
      cin>>cx>>cy;
      c[i]=P(cx,cy);
    }
    for(int i=0;i<m;i++){
      vector<P> cp=vi;
      for(int j=0;j<m;j++){
	if(i==j)continue;
	double X=(c[j].real()-c[i].real())/2.0;
	double Y=(c[j].imag()-c[i].imag())/2.0;
	P A=P(c[i].real()+c[j].imag()-c[i].imag()+X,
	      c[i].imag()-(c[j].real()-c[i].real())+Y);
	P B=P(c[i].real()+X,c[i].imag()+Y);
	cp=convex_cut(cp,L(A,B));
      }
      printf("%.20f\n",area(cp));
    }
    vi.clear();;
  }
  return 0;
}