#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = 1e18;

struct segtree {
	int n;
	vector<ll> t;
	segtree(int nn) { n = nn; t.assign(n<<1, INF); }
	void update(int i, ll v) {
		for(t[i += n] = v; i > 1; i >>= 1) t[i>>1] = min(t[i], t[i^1]);
	}
	ll query(int l, int r) {
		ll res = INF;
		for(l += n, r += n; l < r; l >>= 1, r >>= 1) {
			if(l & 1) res = min(t[l++], res);
			if(r & 1) res = min(t[--r], res);
		}
		return res;
	}
};

int n, q, a, b;
long long sum, ans = INF;
vector<int> x;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n >> q >> a >> b;
	a--;
	b--;
	x.resize(q);
	segtree dpp = segtree(n), dpm = segtree(n);
	for(int i = 0; i < q; i++) {
		cin >> x[i];
		x[i]--;
		if(i > 0) sum += abs(x[i]-x[i-1]);
	}
	dpm.update(a, abs(x[0]-b)-a);
	dpm.update(b, abs(x[0]-a)-b);
	dpp.update(a, abs(x[0]-b)+a);
	dpp.update(b, abs(x[0]-a)+b);
	for(int i = 1; i < q; i++) {
		ll res = min(dpm.query(0, x[i]+1)+x[i], dpp.query(x[i], n)-x[i]);
		if(res-x[i-1]-abs(x[i]-x[i-1]) < dpm.t[x[i-1]+n]) {
			dpm.update(x[i-1], res-x[i-1]-abs(x[i]-x[i-1]));
			dpp.update(x[i-1], res+x[i-1]-abs(x[i]-x[i-1]));
		}
	}
	for(int i = 0; i < n; i++) ans = min(dpm.query(i, i+1)+i, ans);
	cout << ans+sum;
}
