#include<bits/stdc++.h>
using namespace std;
struct help
{
int l,r,i;
help(){}
help(int _l,int _r,int _i)
{
l=_l;
r=_r;
i=_i;
}
};
int n,q;
help a[100001],b[100001];
void read()
{
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>a[i].l>>a[i].r;
a[i].i=i;
}
for(int i=1;i<=q;i++)
{
cin>>b[i].l>>b[i].r;
b[i].i=i;
}
}
bool cmpr(help h1,help h2)
{
if(h1.r==h2.r)return h1.l<h2.l;
return h1.r<h2.r;
}
int t[400001];
void build(int i,int l,int r)
{
if(l==r)
{
t[i]=l;
return;
}
int m=(l+r)/2;
build(i*2,l,m);
build(i*2+1,m+1,r);
if(a[t[2*i]].l<a[t[2*i+1]].l)t[i]=t[2*i];
else t[i]=t[2*i+1];
//cout<<l<<" "<<r<<" "<<t[i]<<endl;
}
int query(int i,int l,int r,int ql,int qr)
{
if(ql>qr)return 0;
if(ql<=l&&r<=qr)return t[i];
int m=(l+r)/2;
int q1=query(i*2,l,m,ql,min(qr,m));
int q2=query(i*2+1,m+1,r,max(m+1,ql),qr);
if(q1==0)return q2;
if(q2==0)return q1;
if(a[q1].l<a[q2].l)return q1;
return q2;
}
int g[200001][32];
int p[200001],id[200001];
void prec()
{
sort(a+1,a+n+1,cmpr);
build(1,1,n);
for(int i=1;i<=n;i++)
{
//cout<<"!! "<<a[i].l<<" "<<a[i].r<<endl;
int h=i;
int l=1,r=i-1;
while(l<=r)
{
int m=(l+r)/2;
if(a[m].r>=a[i].l)
{
h=m;
r=m-1;
}
else l=m+1;
}
h=query(1,1,n,h,i);
g[a[i].i][0]=a[h].i;
//cout<<a[i].i<<" > "<<a[h].i<<endl;
}
for(int j=1;j<=20;j++)
{
for(int i=1;i<=n;i++)
{
g[i][j]=g[g[i][j-1]][j-1];
//cout<<i<<" "<<j<<" "<<g[i][j]<<endl;
}
}
}
bool cmp(help h1,help h2)
{
return h1.i<h2.i;
}
void solve()
{
sort(a+1,a+n+1,cmp);
for(int i=1;i<=q;i++)
{
int x=b[i].l,y=b[i].r;
if(x==y)
{
cout<<0<<endl;
continue;
}
int cnt=0;
if(a[y].l<=a[x].r&&a[x].r<=a[y].r)
{
cout<<1<<endl;
continue;
}
for(int j=20;j>=0;j--)
{
if(a[x].l<a[g[y][j]].l)
{
y=g[y][j];
cnt+=(1<<j);
}
}
if(a[y].l<=a[x].r&&a[x].r<=a[y].r)
{
cout<<cnt+1<<endl;
continue;
}
if(a[y].l>a[x].l&&a[g[y][0]].l<=a[x].l)
{
cnt++;
if(a[x].r<a[y].l)cnt++;
cout<<cnt<<endl;
}
else cout<<"impossible"<<endl;
}
}
int main()
{
read();
prec();
solve();
return 0;
}
/*
6
5
8 9
5 8
9 12
1 3
2 3
10 13
1 3
2 5
1 6
4 5
3 4
4 3
1 5
2 7
3 9
8 10
1 2
1 3
1 4
6 1
5 8
10 12
14 16
3 6
1 4
11 15
4 4
1 4
2 8
5 6
7 10
1 2
2 3
3 2
1 4
6 4
1 5
2 8
5 6
7 10
9 10
12 13
1 6
1 3
3 1
2 5
7 3
2 10
3 5
4 7
6 9
8 11
1 2
6 9
2 5
1 5
1 4
4 1
7 3
2 10
3 5
4 7
6 9
8 11
1 2
7 10
2 7
3 7
7 1
*/
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |