#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int N = 1<<18;
vector<pair<int, int>> nei[N<<1];
int dst[3][N<<1];
void dijkstra(int D[]){
priority_queue<pair<int, int>> pq;
for (int i=1;i<N+N;i++)
pq.push({-D[i], i});
while (pq.size() > 0){
auto [mn, u] = pq.top();
pq.pop();
mn = -mn;
if (D[u] != mn)
continue;
for (auto [i, w] : nei[u]){
if (D[u] + w < D[i]){
D[i] = D[u] + w;
pq.push({-D[i], i});
}
}
}
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
int n, q;
cin>>n;
for (int i=N+N-1; i; i--){
dst[0][i] = dst[1][i] = N;
nei[i].push_back({i / 2, 0});
}
for (int i=1;i<=n;i++){
int l, r;
cin>>l>>r;
dst[2][i+N] -= (1 < i and i < n);
for (l += N-1, r += N+1; l + 1 < r; l /= 2, r /= 2){
if (!(l & 1))
nei[l^1].push_back({i + N, 1});
if (r & 1)
nei[r^1].push_back({i + N, 1});
}
}
dst[0][N+1] = dst[1][N+n] = 0;
dijkstra(dst[0]);
dijkstra(dst[1]);
for (int i=1;i<N+N;i++)
dst[2][i] += dst[0][i] + dst[1][i];
dijkstra(dst[2]);
cin>>q;
for (int i=1, x;i<=q;i++){
cin>>x;
cout<<(dst[2][x + N] >= N ? -1 : dst[2][x + N])<<endl;
}
}