#include <iostream>
#include <complex>
#include <cstdio>
#include <utility>
#include <vector>
using namespace std;
typedef complex<double> P;
typedef pair<P,P> L;
typedef pair<P,double> C;
typedef vector<P> Poly;
#define X real()
#define Y imag()
#define EPS (1e-10)
#define INF (1e15)

//2D version
namespace std{
  bool operator < (const P& a, const P& b){
    return a.X != b.X ? a.X < b.X : a.Y < b.Y;
  }
  bool cmp_y(const P &a, const P &b){
    return a.Y != b.Y ? a.Y < b.Y : a.X < b.X;
  }
  bool operator == (const P& a, const P& b){
    return abs(a-b) < EPS;
  }
}

double dot(P a, P b){
  return a.X * b.X + a.Y * b.Y;
}
double cross(P a, P b){
  return a.X * b.Y - a.Y * b.X;
}

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) < 0 ) return +2;
  if( abs(b) + EPS < abs(c) ) return -2;
  return 0;
}

P intersection(L a, L b){
  //直線aと直線bの交点
  return a.first + cross(b.second-b.first,a.first-b.first)/(-cross(b.second-b.first,a.second-b.first)+cross(b.second-b.first,a.first-b.first))*(a.second-a.first);
}

Poly convex_cut(Poly p, L l){
  Poly ret;
  int n = p.size();
  for(int i = 0; i < n; ++i){
    if(ccw(l.first, l.second, p[i]) != -1) ret.push_back(p[i]);
    if(ccw(l.first, l.second, p[i]) != -1 ^ ccw(l.first, l.second, p[(i+1)%n]) != -1) ret.push_back(intersection(L(p[i], p[(i+1)%n]), l));
  }
  return ret;
}

double area(Poly p){
  double ret = 0;
  int n = p.size();
  for(int i = 0; i < n; ++i){
    ret += cross(p[i], p[(i+1)%n])/2;
  }
  return ret;
}

int main(){
  int N, M;
  while(cin >> N >> M, N||M){
    Poly I;
    for(int i = 0; i < N; ++i){
      double x, y;
      cin >> x >> y;
      I.push_back(P(x,y));
    }
    Poly p;
    for(int j = 0; j < M; ++j){
      double x, y;
      cin >> x >> y;
      p.push_back(P(x,y));
    }
    for(int i = 0; i < M; ++i){
      Poly q = I;
      for(int j = 0; j < M; ++j){
        if(i == j) continue;
        L bisector = L((p[i]+p[j])/2.0, (p[i]+p[j])/2.0 + (p[j]-p[i])*P(0,1));
        q = convex_cut(q, bisector);
      }
      printf("%.12lf\n", area(q));
    }
  }
  return 0;
}

