#include using namespace std; using ll=long long; using ld=double; using pll=pair; using vll=vector; using vpll=vector; using vvll=vector; #define FOR(i,a,b) for(ll i=a;i<(ll)b;++i) #define ROF(i,a,b) for(ll i=a;i>=(ll)b;--i) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define aa first #define bb second #define pb push_back #define MX 5007 ll dx[]={1,0,-1,0,1,1,-1,-1}; ll dy[]={0,1,0,-1,1,-1,-1,1}; struct N { ll x,y,i,d; }; bool vis[MX][MX]; int rt[MX][MX]; bool ok(ll x, ll y) { return x>=0 && y>=0 && x> n >> q; set G; queue Q; F(n) { // guards ll x,y; cin >> x >> y; Q.push({x,y,i,0ll}); } while(Q.size()) { auto cur=Q.front(); Q.pop(); if(vis[cur.x][cur.y])continue; vis[cur.x][cur.y]=1; rt[cur.x][cur.y]=cur.d; F(8) { N nx = {cur.x+dx[i],cur.y+dy[i],cur.i,cur.d+1}; if(ok(nx.x,nx.y) && !vis[nx.x][nx.y]) { Q.push(nx); } } } F(q) { ll x,y; cin >> x >> y; cout << rt[x][y]<