#include <bits/stdc++.h>
#define ll long long
#define db double
#define int long long
#define ls rt<<1
#define rs rt<<1|1
#define lb(x) x&-x
using namespace std;
const int N=100002,inf=1e9;
int n,D,dis[N<<1],h,t;
struct node{
int a,b,id,ok;
bool operator <(const node &g)const{
if(ok!=g.ok) return ok<g.ok;
return ok?a<g.a:b<g.b;
}
}p[N<<1],q[N<<1];
set<node>s;
set<node>::iterator it,ii;
void bfs(){
node u;
while(h<t){
u=q[h++];
if(!u.ok){
it=s.lower_bound(node{u.a-D,0,0,1});
while(it!=s.end()&&(*it).a<=u.a){
ii=it++;
q[t++]=(*ii),dis[(*ii).id]=dis[u.id]+1;
s.erase(ii);
}
}else{
it=s.upper_bound(node{0,u.b-D,0,0});
while(it!=s.end()&&!(*it).ok&&(*it).b<=u.b){
ii=it++;
q[t++]=(*ii),dis[(*ii).id]=dis[u.id]+1;
s.erase(ii);
}
}
}
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>D;
for(int i=1;i<=n+n;i++) cin>>p[i].a>>p[i].b,p[i].id=i;
for(int i=n+1;i<=n+n;i++) p[i].ok=1;
for(int i=1;i<=n;i++){
if(p[i].b==0) q[t++]=p[i],dis[p[i].id]=1;
else s.insert(p[i]);
}for(int i=n+1;i<=n+n;i++){
if(p[i].a==0) q[t++]=p[i],dis[p[i].id]=1;
else s.insert(p[i]);
}bfs();
for(int i=1;i<=n;i++){
if(!dis[i]) cout<<"-1\n";
else cout<<dis[i]<<"\n";
}
return 0;
}