//考虑给出的一个先手必败点,和它同行,同列的点(不包括本身)是先手必胜点
//转化一下,如果给出的一个先手必败点(a,b) 
#include<bits/stdc++.h>
using namespace std;
const int N=101000;
int n,m,ans[N];
struct node{
	int x,y,id;
}a[N<<1];
bool cmp(const node&aa,const node&bb){
	return (aa.x<bb.x)|(aa.x==bb.x&&aa.y<bb.y)|(aa.x==bb.x&&aa.y==bb.y&&aa.id<bb.id);
}
int d[N],tot;
int c[N];
#define lowbit(i) (i&(-i))
inline void add(int x){
	for(int i=x;i<=tot;i+=lowbit(i))c[i]++;
}
inline int sum(int x){
	int ret=0;
	for(int i=x;i>0;i-=lowbit(i))ret+=c[i];
	return ret;
}//维护被删列 
bool del[N];
int main(){
//	freopen("y.in","r",stdin);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i){
		scanf("%d%d",&a[i].x,&a[i].y);
		d[++tot]=a[i].y;//记录先手必败点 
	}
	for(int i=1;i<=m;++i){
		scanf("%d%d",&a[i+n].x,&a[i+n].y);
		a[i+n].id=i;
	}
	n+=m;
	sort(d+1,d+tot+1);
	tot=unique(d+1,d+tot+1)-d-1;
	sort(a+1,a+n+1,cmp);
	int u=0,las=-1;//记录被删行 
	for(int i=1;i<=n;++i){
		if(a[i].id){
			if(!a[i-1].id&&a[i-1].x==a[i].x&&a[i-1].y==a[i].y)ans[a[i].id]=1;
			else if(a[i].x!=las){
				int y=upper_bound(d+1,d+tot+1,a[i].y)-d-1;//最后一个小于a[i].y的数 
				if((a[i].y!=d[y]||!del[y])&&a[i].y+u-sum(y)==a[i].x)ans[a[i].id]=1;
			}
		}
		else{
			int y=lower_bound(d+1,d+tot+1,a[i].y)-d,d=u-sum(y);
			if(a[i].x<a[i].y+d){
				if(!del[y])del[y]=1,add(y);
			}
			else if(a[i].x>a[i].y+d&&las!=a[i].x){
				las=a[i].x;
				++u;
			}
		}
	}
	for(int i=1;i<=m;++i)
		puts(ans[i]?"LOSE":"WIN");
	return 0;
}