from sys import stdin input = stdin.readline def judge(ax, ay, bx, by, cx, cy, dx, dy): def func(a, b, c, d): return min(a, b) > max(c, d) or max(a, b) < min(c, d) if func(ax, bx, cx, dx) or func(ay, by, cy, dy): return False s = (ax-bx)*(cy-ay)-(ay-by)*(cx-ax) t = (ax-bx)*(dy-ay)-(ay-by)*(dx-ax) if s*t > 0: return False s = (cx-dx)*(ay-cy)-(cy-dy)*(ax-cx) t = (cx-dx)*(by-cy)-(cy-dy)*(bx-cx) if s*t > 0: return False return True def distance(x1, y1, x2, y2): return ((x2-x1)**2 + (y2-y1)**2) ** 0.5 INF = 1<<60 N, M = map(int, input().split()) A = [list(map(int, input().split())) for _ in range(N)] query = [list(map(int, input().split())) for _ in range(M)] N *= 2 B = [] for a, b, c, d in A: B.append((a, b)) B.append((c, d)) dist = [[INF]*N for _ in range(N)] for i in range(N): dist[i][i] = 0 for i in range(N-1): x1, y1 = B[i] for j in range(i+1, N): x2, y2 = B[j] for k in range(0, N, 2): if k//2 in [i//2, j//2]: continue x3, y3, x4, y4 = *B[k], *B[k+1] if judge(x1, y1, x2, y2, x3, y3, x4, y4): break else: dist[i][j] = distance(x1, y1, x2, y2) dist[j][i] = distance(x1, y1, x2, y2) for k in range(N): for i in range(N): for j in range(N): dist[i][j] = min(dist[i][j], dist[i][k]+dist[k][j]) for a, b, c, d in query: s = (a-1)*2+(b-1) t = (c-1)*2+(d-1) print(dist[s][t])