#include <bits/stdc++.h>
using namespace std;
typedef long long lli;

const lli INF=1e16;
struct seg_tr{
	static const int MAX=1<<18;
	lli tr[MAX<<1];
	void init() { for(int i=0;i<MAX+MAX;i++) tr[i] = INF; }
	void upd(int cur,lli val) {
		tr[cur+=MAX] = val;
		cur>>=1;
		while(cur) {
			tr[cur] = min(tr[cur<<1],tr[cur<<1|1]);
			cur>>=1;
		}
	}
	lli get(int l,int r) {
		l+=MAX; r+=MAX;

		lli res = INF;
		while(l<=r) {
			res = min({res,tr[l],tr[r]});
			if(l&1) l++;
			if(!(r&1)) r--;
			l>>=1; r>>=1;
		}
		return res;
	}
}lt,rt;

int n,q,A,B;
inline lli _abs(lli cur) {return cur<0 ? -cur : cur;}
int main() {
	scanf("%d%d%d%d",&n,&q,&A,&B);
	lt.init(); rt.init();
	
	int pr = A, cur;
	lli sum = 0;
	lt.upd(B, -B); rt.upd(B, B);
	while(q--) {
		scanf("%d",&cur);
		sum += _abs(cur - pr);
		
		lli v = min(lt.get(1,cur)+cur, rt.get(cur,n)-cur);
		lt.upd(pr, v-_abs(cur-pr)-pr);
		rt.upd(pr, v-_abs(cur-pr)+pr);
		pr=cur;
	}

	lli ad = INF;
	for(int i=1;i<=n;i++)
		ad = min({ad,lt.get(i,i)+i, rt.get(i,i)-i});
	printf("%lld\n",sum+ad);

	return 0;
}
