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

#define repl(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define rep(i,n) repl(i,0,n)
#define all(x) (x).begin(),(x).end()
#define dbg(x) cout<<#x"="<<x<<endl

typedef double D;
typedef complex<D> P;
#define X real()
#define Y imag()
const D eps=1e-8;
const D inf=1e12;
struct L : public vector<P> { // line and segment
  L(const P& a,const P &b){
    push_back(a);
    push_back(b);
  }
};
D cross(P a,P b){ return (conj(a)*b).Y; }
D dot(P a,P b){ return (conj(a)*b).X; }
int ccw(P a,P b,P c) {
  b=b-a;c=c-a;
  if(cross(b,c)>0) return +1;       // counter clockwise
  if(cross(b,c)<0) return -1;       // clockwise
  if(dot(b,c)<0)   return +2;       // c--a--b on line
  if(norm(b)<norm(c)) return -2;       // a--b--c on line
  return 0;
}
P crosspoint(L l,L m) {
  D A=cross(l[1]-l[0],m[1]-m[0]);
  D B=cross(l[1]-l[0],l[1]-m[0]);
  if (abs(A)<eps&&abs(B)<eps) return m[0]; // same line
  if (abs(A)<eps) assert(false); // !!!PRECONDITION NOT SATISFIED!!!
  return m[0]+B/A*(m[1]-m[0]);
}

vector<P> convex_cut(vector<P>& poly,L l) {
  vector<P> Q;
  int sz=poly.size();
  for (int i = 0; i < sz; i++) {
    P A = poly[i], B = poly[(i+1)%sz];
    if(ccw(l[0], l[1], A) != -1)Q.push_back(A);
    if(ccw(l[0], l[1], A)*ccw(l[0], l[1], B) < 0){
      Q.push_back(crosspoint(L(A, B), l));
    }
  }
  return Q;
}

L bisector_line(L l){
  P hp=0.5*(l[0]+l[1]);
  P v=l[1]-l[0];
  return L(hp,hp+P(-v.Y,v.X));
}

D calc_area(vector<P>& poly) {
  D res = 0;
  int sz=poly.size();
  for (int i = 0; i < sz; i++){
    res += cross(poly[i], poly[(i+1)%sz]);
  }
  return res/2.0;
}

int main(){
  while(1){
    int n,m;
    vector<P> ps,cs;
    cin>>n>>m;
    if(n==0||m==0)break;
    rep(i,n){
      D px,py;
      cin>>px>>py;
      ps.push_back(P(px,py));
    }
    rep(i,m){
      D cx,cy;
      cin>>cx>>cy;
      cs.push_back(P(cx,cy));
    }
    rep(i,m){
      vector<P> tmp=ps;
      rep(j,m){
        if(j==i)continue;
        L l=bisector_line(L(cs[i],cs[j]));
        tmp=convex_cut(tmp,l);
      }
      D res=calc_area(tmp);
      printf("%.10f\n", res);
    }
  }
  return 0;
}

