require 'matrix'

class Land
	def initialize(*args)
		@cx, @cy, @points = args
	end

	def area
		s = 0
		(@points + [@points[0]]).each_cons(2) do |(x1, y1), (x2, y2)|
			s += x1 * y2 - y1 * x2
		end
		(s / 2.0).abs
	end

	def cut(a, b, c) #by line a*x+b*y+c=0
		s = a * @cx + b * @cy + c	
		@points.size.times do |i|
			(x1, y1), (x2, y2) = @points[i], @points[(i+1) % @points.size]
			if (a * x1 + b * y1 + c) * (a * x2 + b * y2 + c) < 0
				d, e = y2 - y1, x2 - x1
				m = Matrix[
					[a, b],
					[d, -e]
					]
				v = Vector[-c, d * x1 - e * y1]
				#p (m.inv * v).to_a
				@points[i] += (m.inv * v).to_a
			end
		end

		@points = @points.flatten.each_slice(2).to_a
		@points = @points.select{|x, y| s * (a * x + b * y + c) >= 0}
		
	end

	attr_reader :cx, :cy
end

loop do
	n, m = gets.split.map(&:to_i)
	break if n == 0
	points = (1..n).map { gets.split.map(&:to_i) }
	lands = (1..m).map do
		cx, cy = gets.split.map(&:to_i)
		l = Land.new(cx, cy, points.dup)
	end
	lands.combination(2) do |l1, l2|
		x1, y1, x2, y2 = l1.cx, l1.cy, l2.cx, l2.cy
		u, v = (x1 + x2) / 2, (y1 + y2) / 2

		a = x1 - x2
		b = y1 - y2
		c = -(a * u + b * v)
		
		l1.cut(a, b, c)
		l2.cut(a, b, c)
	end	
	lands.each {|l| p l.area.to_f}
end