#include <bits/stdc++.h>
using namespace std;
const int inf=1e9;
const int MAXN=100005;
template <typename T>
void read(T &x) {
	T flag=1;
	char ch=getchar();
	for (; '0'>ch||ch>'9'; ch=getchar()) if (ch=='-') flag=-1;
	for (x=0; '0'<=ch&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
	x*=flag;
}
struct node{
	int x, y;
}p[MAXN];
int n, m;
map<int, int> mnx, mny;
map<pair<int, int>, bool> mark;
map<int, map<int, int> > mp;
int main() {
	read(n); read(m);
	for (int i=1, x, y; i<=n; i++) {
		read(x); read(y);
		mark[make_pair(x, y)]=true;
		if (mnx.find(x)==mnx.end()) mnx[x]=y;
		else mnx[x]=min(mnx[x], y);
		if (mny.find(y)==mny.end()) mny[y]=x;
		else mny[y]=min(mny[y], x);
	}
	int nowx=0, nowy=0;
	for (; nowx<=inf&&nowy<=inf; ) {
		if (mnx.find(nowx)!=mnx.end()&&mnx[nowx]<=nowy) {
			nowx++;
			continue;
		}
		if (mny.find(nowy)!=mny.end()&&mny[nowy]<=nowx) {
			nowy++;
			continue;
		}
		if (mnx.find(nowx)!=mnx.end()||mny.find(nowy)!=mny.end()) {
			mark[make_pair(nowx, nowy)]=true;
			nowx++;
			nowy++;
			continue;
		}
		map<int, int> :: iterator x=mnx.lower_bound(nowx), y=mny.lower_bound(nowy);
		int tmp=inf;
		if (x!=mnx.end()) tmp=min(tmp, (*x).first-nowx);
		if (y!=mny.end()) tmp=min(tmp, (*y).first-nowy);
		mark[make_pair(nowx, nowy)]=true;
		mp[nowx-nowy][nowx+tmp]=nowx;
		nowx+=tmp;
		nowy+=tmp;
	}
	for (int i=1; i<=m; i++) {
		int a, b;
		read(a); read(b);
		if (mark[make_pair(a, b)]) puts("LOSE");
		else {
			map<int, int> :: iterator it=mp[a-b].upper_bound(a);
			if (it!=mp[a-b].end()&&(*it).second<=a) {
				puts("LOSE");
			} else {
				puts("WIN");
			}
		}
	}
	return 0;
}