← Home
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll _=100005;
ll n,m,sx,sy,ex,ey,x,y,d[_],h[_],T,i;bool f[_];priority_queue<pair<ll,ll> >q;
struct o{ll x,y,z;}a[_<<3],b[_];
bool Q1(o x,o y){return x.x<y.x;}
bool Q2(o x,o y){return x.y<y.y;}
void p0(ll x,ll y,ll z){a[++T].x=h[x];h[x]=T;a[T].y=y;a[T].z=z;}
void add(ll x,ll y,ll z){p0(x,y,z);p0(y,x,z);}
int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>m>>n>>sx>>sy>>ex>>ey;memset(d,0x7f,sizeof(d));
	for(i=1;i<=n;i++)cin>>b[i].x>>b[i].y,b[i].z=i;
	for(i=1;i<=n;i++)p0(0,i,min(abs(sx-b[i].x),abs(sy-b[i].y))),p0(i,n+1,abs(ex-b[i].x)+abs(ey-b[i].y));
	p0(0,n+1,abs(sx-ex)+abs(sy-ey));
	sort(b+1,b+n+1,Q1);
	for(i=1;i<n;i++)add(b[i].z,b[i+1].z,b[i+1].x-b[i].x);
	sort(b+1,b+n+1,Q2);
	for(i=1;i<n;i++)add(b[i].z,b[i+1].z,b[i+1].y-b[i].y);
	d[0]=0;q.push(make_pair(0,0));
	while(q.size()){
		x=q.top().second;q.pop();
		if(f[x])continue;else f[x]=1;
		for(i=h[x];i;i=a[i].x){
			y=a[i].y;
			if(d[y]<=d[x]+a[i].z)continue;
			d[y]=d[x]+a[i].z;q.push(make_pair(-d[y],y));
		}
	}
	cout<<d[n+1]<<'\n';
}