#include<iostream>
#include<cstring>
#include<cstdio>
#include<set>
#include<queue>
#include<unordered_map>
#include<vector>
#include<algorithm>

using namespace std;

#define LL long long
#define fgx cerr<<"--------------"<<endl;
#define dgx cerr<<"=============="<<endl;

inline int read(){
	int x=0,f=1; char c=getchar();
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) x=x*10+c-'0';
	return x*f;
}
const int MAXN = 200010;
const int INF = 1e9;

struct data{
	int val,x,y;
	data(int vv=0,int xx=0,int yy=0){
		val=vv; x=xx; y=yy;
	}
	bool operator < (const data &a) const{
		return a.val<val;
	}
}; int N,M;
priority_queue<data> up,ln,que[MAXN*3+1];
#define pii pair<int,int>
#define mp make_pair
#define fr first
#define sc second
pii sta[MAXN+1];
multiset<pii > S;
int len[MAXN+1];
int posx=0,posy=0,top=0;
unordered_map<int,int> mpt;
inline void Clean(int id){
	id=mpt[id];
	while(!que[id].empty()&&que[id].top().x<posx&&que[id].top().y<posy) que[id].pop();
} int idt;

int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	N=read(),M=read();
	for(int i=1;i<=N;i++){
		int x=read(),y=read();
		up.push(data(y,x,y));
		ln.push(data(x,x,y));
		S.insert(make_pair(x,y));
		if(mpt.find(x-y)==mpt.end()) mpt[x-y]=++idt;
		que[mpt[x-y]].push(data(x,x,y));
	}
	while(1){
		while(!ln.empty()&&(ln.top().val<posx||(ln.top().x-posx)<=(ln.top().y-posy))) ln.pop();
		while(!up.empty()&&(up.top().val<posy||(up.top().x-posx)>=(up.top().y-posy))) up.pop();
		data upt=data(INF,-1,-1),lnt=upt;
		if(!up.empty()) upt=up.top();
		if(!ln.empty()) lnt=ln.top();
		if(upt.val==INF&&lnt.val==INF) break;
		//cout<<"yes:"<<lnt.val<<" "<<upt.val<<" "<<posx<<" "<<posy<<endl;
		if(upt.val-posy==lnt.val-posx){
			if(upt.val-posy>0){
				sta[++top]=mp(posx,posy);
				len[top]=upt.val-posy;
			}
			posy=upt.val+1;
			posx=lnt.val+1;
			up.pop(); ln.pop(); continue;
		}
		if((upt.val-posy)<(lnt.val-posx)){
			if(upt.val-posy>0){
				sta[++top]=mp(posx,posy);
				len[top]=upt.val-posy;
			}
			posx+=upt.val-posy;
			posy=upt.val+1;
			up.pop();
			//cout<<"up:\n";
			Clean(posx-posy+1);
			if(!que[mpt[posx-posy+1]].empty()){
				ln.push(que[mpt[posx-posy+1]].top());
			}
		}else{
			if(lnt.val-posx>0){
				sta[++top]=mp(posx,posy);
				len[top]=lnt.val-posx; 
			}
			posy+=lnt.val-posx;
			posx=lnt.val+1;
			ln.pop();
			//cout<<"ln:\n";
			Clean(posx-posy-1);
			if(!que[mpt[posx-posy-1]].empty()){
				data xt=que[mpt[posx-posy-1]].top();
				up.push(data(xt.y,xt.x,xt.y));
			}
		}
	} sta[++top]=mp(posx,posy); len[top]=INF;
//	fgx
//	for(int i=1;i<=top;i++){
//		cout<<sta[i].fr<<" "<<sta[i].sc<<":"<<len[i]<<endl;
//	}
	while(M--){
		int x=read(),y=read();
		if(S.find(make_pair(x,y))!=S.end()){
			puts("LOSE"); continue;
		} int l=1,r=top,pos=0;
		while(l<=r){
			int mid=(l+r)>>1;
			if(sta[mid].fr<=x) pos=mid,l=mid+1;
			else r=mid-1;
		} 
		if(x-sta[pos].fr==y-sta[pos].sc&&(x-sta[pos].fr+1)<=len[pos]){
			puts("LOSE");
		} else puts("WIN");
	}
	return 0;
}
