#include <bits/stdc++.h>
using namespace std;
double cross(complex<double> a, complex<double> b) {
  return (conj(a) * b).imag();
}
complex<double> intersection(complex<double> a1, complex<double> a2,
                             complex<double> b1, complex<double> b2) {
  complex<double> a = a2 - a1;
  complex<double> b = b2 - b1;
  return a1 + a * cross(b, b1 - a1) / cross(b, a);
}
vector<complex<double> > cut(complex<double> a, complex<double> b,
                             const vector<complex<double> > &p) {
  int n = p.size();
  vector<double> c(n);
  for (int i = 0; i < n; i++) {
    c[i] = cross(b - a, p[i] - a);
  }
  vector<complex<double> > r;
  for (int i = 0; i < n; i++) {
    if (c[i] >= n) {
      r.push_back(p[i]);
    }
    if (c[i] * c[(i + 1) % n] < 0) {
      r.push_back(intersection(a, b, p[i], p[(i + 1) % n]));
    }
  }
  return r;
}
double area(const vector<complex<double> > &p) {
  double a = 0;
  for (int i = 0; i < p.size(); i++) {
    a += cross(p[(i + 1) % p.size()], p[i]);
  }
  return fabs(a) / 2;
}
int main() {
  for (int N, M; cin >> N >> M, N;) {
    vector<complex<double> > p;
    for (int i = 0; i < N; i++) {
      int x, y;
      cin >> x >> y;
      p.emplace_back(x, y);
    }
    vector<complex<double> > c;
    for (int i = 0; i < M; i++) {
      int x, y;
      cin >> x >> y;
      c.emplace_back(x, y);
    }
    for (int i = 0; i < M; i++) {
      vector<complex<double> > cp = p;
      for (int j = 0; j < M; j++) {
        if (i == j) continue;
        complex<double> m = (c[i] + c[j]) / 2.;
        complex<double> d = (c[j] - c[i]) * complex<double>(0, 1) + m;
        cp = cut(m, d, cp);
      }
      cout.precision(9);
      cout << fixed << area(cp) << endl;
    }
  }
}
