#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
const int N=3e5+5;
int n,m,ans[N];
struct dat{
	int id,x,y;
}tmp[N],Q[N];
vector<int>vec;
vector<dat>vc[N];
set<pair<int,int> >_;
struct node{
	int l,r;mutable int v;
	inline bool operator<(const node&rhs)const{return l!=rhs.l?l<rhs.l:r<rhs.r;}
};
set<node>st;
typedef set<node>::iterator iter;
iter split(int pos){
	iter it=st.lower_bound((node){pos});
	if(it!=st.end()&&it->l==pos)return it;
	--it;
	int l=it->l,r=it->r,v=it->v;
	st.erase(it),st.insert((node){l,pos-1,v});
	return st.insert((node){pos,r,v}).first;
}
inline void assign(int l,int r,int v){
	iter R=split(r+1),L=split(l);
	st.erase(L,R),st.insert((node){l,r,v});
}
void move(int&y,int step){
	int ed=y+step;
	iter L=split(y+1),R=L;
	while(R!=st.end()){
		if(R->l>ed)break;
		if(R->v==1)ed+=R->r-R->l+1;
		++R;
	}
	ed=min(ed,1000000001);
	if(y<ed)assign(y,ed-1,1);
	y=ed;
}
void solve(){
	int _r=0;
	for(int i=0;i<(int)vec.size();++i){
		if(i)move(_r,vec[i]-vec[i-1]);
		for(dat it:vc[i])if(!it.id){
			assign(it.y,it.y,1);
			_r=min(_r,it.y);
		}else{
			if(_.count(make_pair(it.x,it.y)))ans[it.id]=4;
			else if(it.y==_r)ans[it.id]=4;
		}
		assign(_r,_r,1);
	}
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	vec.emplace_back(0);
	st.insert((node){0,1000000005,0});
	for(int i=1;i<=n;++i){
		cin>>tmp[i].x>>tmp[i].y;
		vec.emplace_back(tmp[i].x);
	}
	for(int i=1;i<=m;++i){
		cin>>Q[i].x>>Q[i].y,Q[i].id=i;
		vec.emplace_back(Q[i].x);
	}
	sort(vec.begin(),vec.end());
	vec.erase(unique(vec.begin(),vec.end()),vec.end());
	for(int i=0;i<=n;++i){
		int x=lower_bound(vec.begin(),vec.end(),tmp[i].x)-vec.begin();
		vc[x].emplace_back(tmp[i]);
		_.emplace(tmp[i].x,tmp[i].y);
	}
	for(int i=1;i<=m;++i){
		int x=lower_bound(vec.begin(),vec.end(),Q[i].x)-vec.begin();
		vc[x].emplace_back(Q[i]);
	}
	solve();
	for(int i=1;i<=m;++i)
	cout<<"WIN\0LOSE"+ans[i]<<'\n';
	return 0;
}