#include <bits/stdc++.h>
using namespace std;
typedef complex<double> P;
typedef pair<P, P> L;
const double EPS = 1e-8;
const double PI = 6.0 * asin(0.5);
namespace std {
bool operator<(const P& a, const P& b) {
  return fabs(real(a) - real(b)) < EPS ? imag(a) < imag(b) : real(a) < real(b);
}
}  // namespace std
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> mp;
double calc(int idx, vector<P> g) {
  for (int i = 0; i < m; i++) {
    if (i == idx) continue;
    P t = mp[idx] - mp[i];
    P a = P(abs(t) / 2, 1) * t / abs(t) + mp[i];
    P b = P(abs(t) / 2, -1) * t / abs(t) + mp[i];
    if (ccw(a, b, mp[idx]) < 0) swap(a, b);
    g = convex_cut(g, L(a, b));
  }
  return area(g);
}
int main() {
  while (1) {
    cin >> n >> m;
    if (!n && !m) break;
    vector<P> pl(n);
    mp.resize(m);
    for (int i = 0, x, y; i < n; i++) cin >> x >> y, pl[i] = P(x, y);
    for (int i = 0, x, y; i < m; i++) cin >> x >> y, mp[i] = P(x, y);
    for (int i = 0; i < m; i++) printf("%.1f\n", calc(i, pl));
  }
  return 0;
}
