#include <algorithm>
#include <iostream>
#include <cstdlib>

#define TOLERANCIJA 0.01f

using namespace std;

typedef struct TKrtica {
	double brzina;
	double poz;
	double vreme;
	int id;
} Krtica;

bool porediPoPoziciji(const Krtica& left, const Krtica& right) {
	return left.poz < right.poz;
}

bool porediPoId(const Krtica& left, const Krtica& right) {
	return left.id < right.id;
}

int brojKrticaH;
int brojKrticaV;
Krtica* h;
Krtica* v;

void ulaz() {
	freopen("krtice.in", "r", stdin);
	freopen("krtice.out", "w", stdout);
	scanf("%d %d", &brojKrticaV, &brojKrticaH);
	v = (Krtica*) malloc(sizeof(Krtica) * brojKrticaV);
	h = (Krtica*) malloc(sizeof(Krtica) * brojKrticaH);

	for (int i=0; i<brojKrticaV; i++) {
		scanf("%lf %lf", &v[i].poz, &v[i].brzina);
		v[i].vreme = 0.0f;
		v[i].id = i;
	}

	for (int i=0; i<brojKrticaH; i++) {
		scanf("%lf %lf", &h[i].poz, &h[i].brzina);
		h[i].vreme = 0.0f;
		h[i].id = i;
	}
}

void obrada() {
	sort(h, h+brojKrticaH, porediPoPoziciji);
	sort(v, v+brojKrticaV, porediPoPoziciji);
	int nextV = 0;
	int nextH = 0;

	while (nextV < brojKrticaV || nextH < brojKrticaH) {
		if (nextV == brojKrticaV) {
			h[nextH++].vreme = -1.0;
		} else if (nextH == brojKrticaH) {
			v[nextV++].vreme = -1.0;
		} else {
			double tV = h[nextH].poz / v[nextV].brzina;
			double tH = v[nextV].poz / h[nextH].brzina;
			if (tV > tH) {
				v[nextV++].vreme = tV;
			} else if (tV < tH) {
				h[nextH++].vreme = tH;
			} else {
				fprintf(
				stderr,
				"Nepravilan slucaj! Krtice %d i %d se susrecu u istom trenutku %lf!",
				nextV, nextH, tV);
				h[nextH].vreme = v[nextV].vreme = -1.0;
			}
		}
	}
}

void izlaz() {
	sort(h, h+brojKrticaH, porediPoId);
	sort(v, v+brojKrticaV, porediPoId);

	for (int i=0; i<brojKrticaV; i++)
		printf("%lf\n", v[i].vreme);

	for (int i=0; i<brojKrticaH; i++)
		printf("%lf\n", h[i].vreme);
}

bool jednako(double a, double b) {
	return (a + TOLERANCIJA > b) && (b + TOLERANCIJA > a);
}

void tester(const char* testovi) {
	char ulaz[512];
	char izlaz[512];

	FILE* fTestovi = fopen(testovi, "r");
	int count = 1;

	while (!feof(fTestovi)) {
		if (fscanf(fTestovi, "%s %s", ulaz, izlaz) <= 0)
			break; // kraj testova        
		printf("Testiram za: Ulaz %s Izlaz: %s Rezultat: ", ulaz, izlaz);
		try {
			// pripremi ulaz
			fclose(fopen("krtice.out", "w"));
			FILE* fUlaz = fopen(ulaz, "r");
			FILE* fKrticeIn = fopen("krtice.in", "w");

			int ch;
			while ((ch = fgetc(fUlaz)) != EOF) {
				fputc(ch, fKrticeIn);
			}

			fclose(fKrticeIn);
			fclose(fUlaz);
			// pokreni program
			system("krtice.exe");
			// otvori izlaz programa i tacan izlaz
			FILE* ispravno = fopen(izlaz, "r");
			FILE* izlazPrograma;

			try {
				izlazPrograma = fopen("krtice.out", "r");
			} catch (exception) {
				fclose(ispravno);
				throw "Greska kod otvaranja fajla";
			}
			// poredi izlaze programa
			while (true) {
				double a, b;
				int fa, fb;

				fa = fscanf(ispravno, "%lf", &a);
				fb = fscanf(izlazPrograma, "%lf", &b);

				if ( (fa <= 0 && fb > 0) || (fa > 0 && fb <= 0) ) {
					throw "Razlicit EOF";
				} else if (fa < 0 && fb < 0) {
					break;
				}

				if (!jednako(a,b)) {
					printf("\n%lf != %lf\n", a, b);
					throw "Neispravan izlaz";
				}
			}
			printf("OK %d\n", count++);
		} catch (const char* exception) {
			printf("FAILED\n");
			printf("\tZASTO: %s\n", exception);
		}
	}

	fclose(fTestovi);
}

int main(int argc, char** argv) {
	if (argc == 1) {
		ulaz();
		obrada();
		izlaz();
	} else {
		tester(argv[1]);
	}
	return 0;
}
