#include<bits/stdc++.h>
using namespace std;

typedef complex<double> P;
typedef pair<P,P> L;

const double EPS = 1E-6;

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;
  if(cross(b,c) < -EPS) return -1;
  if(dot(b,c) < -EPS) return 2;
  if(norm(b) < norm(c)) return -2;
  return 0;
}

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;
};

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;
}


int N,M;
vector<P> V,C;

int main(){

  while( cin >> N >> M && (N||M) ){
    V.clear(); C.clear();
    for(int i=0;i<N;i++){
      int x,y; cin >> x >> y;
      V.push_back(P(x,y));
    }
    for(int i=0;i<M;i++){
      int x,y; cin >> x >> y;
      C.push_back(P(x,y));
    }

    for(int i=0;i<M;i++){
      vector<P> sp = V;
      for(int j=0;j<M;j++){
        if( i == j ) continue;
        P c = (C[i] - C[j])/2.0 + C[j];
        P r = C[i]-C[j];
        r = P( r.imag(), -r.real() );
        L s = L(c,c+r);
        //	cout << i << " <> " << j << " " << s.first << " "<< s.second << endl;
        sp = convex_cut(sp,s);
      }
      printf("%.10lf\n",area(sp));
    }


  }
  
}