// Aimi >> Konomi Suzuki >> Yui >>  Ikimono Gakari >> Garninelia >> Kalafina... dude?
 
// .... Sempre Amei Você ...
 
// Sempre amei você
// Mesmo de longe sem te ter
// Você me deu forças para viver
// E ser quem eu queria ser
// 
// 
// Você nunca verá uma menina como ela
// Mais linda em sentimentos que romance de novela
// Bela, ingênua, tipo como cinderela
// Sorte é do homem que estiver ao lado dela
// Guerreira, não compare com as demais
// Lutou muito para cumprir a exigência de seus pais
// Sua força vai além do que cê pensa ser capaz
// Essa menina não desiste daquilo que vai atrás, mas
// Eu fui tão cego pra não ver
// Que apenas ao meu lado ela queria viver
// Enquanto que por outra pessoa eu quis correr
// Ela não desistiu de mim mesmo eu a fazendo sofrer
// Que idiota, como eu não pude perceber?
// Que a menina que me amava estava sempre ali pra ver
// Eu sei que esse sentimento eu não mereço ter
// Mas desta vez eu vou tentar com meus erros aprender
//
// 
// Sempre amei você
// Mesmo de longe sem te ter
// Você me deu forças para viver
// E ser quem eu queria ser
// 
// 
// Ela sempre esteve lá, pra me ajudar
// Quando eu caí, me fez levantar
// Lutei tanto por meu sonho que sempre quis alcançar
// Que acabei ficando cego sem poder enxergar
// Eu nem consegui notar
// Que bem na minha frente era quem deveria amar
// Sempre achei que estava certo e que não podia errar
// Mas só mesmo quando perde pra então valorizar
// E eu perdi, e finalmente entendi
// Que quem eu procurava estava sempre ali
// Levou muito tempo pra ficha cair
// Como eu fui tapado, eu tenho que admitir
// Essa menina conseguiu me surpreender
// Seu olhar estava sempre além do que eu podia ver
// Eu tive que a perder, só pra perceber
// Que ao lado dela é onde eu quero viver
// 
// 
// Sempre amei você
// Mesmo de longe sem te ter
// Você me deu forças para viver
// E ser quem eu queria ser
// 
// 
// Eu tive que a perder
// Pra que pudesse perceber
// Que ao lado dela
// É onde eu quero viver
// Sim, um dia pode ser o fim
// Pode ser tarde demais e tudo acabar assim
// Mas pra ela eu vou dizer
// Não volto com minha palavra
// Com você quero viver
// 
// 
// Sempre amei você
// Mesmo de longe sem te ter
// Você me deu forças para viver
// E ser quem eu queria ser 

#pragma GCC optimize ("Ofast,unroll-loops")
#pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
 
#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
 
#define pb push_back
#define ff  first
#define ss second
#define tm1 first
#define tm2 second.first
#define tm3 second.second
#define sz(x) ll(x.size())
#define fill(x, v) memset(x, v, sizeof(x))
#define all(v) (v).begin(), (v).end()
#define FER(i,a,b) for(ll i=ll(a); i< ll(b); ++i)
#define IFR(i,a,b) for(ll i=ll(a); i>=ll(b); --i )
#define fastio ios_base::sync_with_stdio(0); cin.tie(0)
 
#define N 8800015
#define M 21
#define sqr(x) (x)*(x)
#define INF 20000000000000000
#define mod 1000000007
#define bas 31
#define pi acos(-1) 
 
using namespace std;
using namespace __gnu_pbds;
 
typedef long long ll;
typedef pair<ll, ll> ii;
typedef pair<ll, ii > tri;
typedef vector<ll> vi;
typedef vector<ii> vii;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> set_t;
 
#define trace(...) f(#__VA_ARGS__, __VA_ARGS__)
 
template<typename t> void f(const char* x, t&& val1){
    cout<<x<< " : "<<val1<<endl;
}
template<typename t1, typename... t2> void f(const char* x, t1&& val1, t2&&... val2){
    const char* xd=strchr(x+1, ',');
    cout.write(x, xd-x)<<" : "<<val1<<" | ";
    f(xd+1, val2...);
}


struct T{
	ll mx, sum;
	T(){}
	T(ll mx, ll sum) : mx(mx), sum(sum){}
	inline void clear(){
		mx=INF, sum=0;
	}
};

struct ST{
	ll n, ar[1<<18];
	ii lazy[1<<20];
	T tree[1<<20];
	inline T Op(T &val1, T &val2){
		T ty;
		if(val1.mx==INF) return val2;
		if(val2.mx==INF) return val1;
		ty.mx=min(val1.mx, val2.mx);
		ty.sum=val1.sum+val2.sum;
		return ty;	
	}

	inline void updpro(ii laz, ll id, ll l, ll r){
		if(laz.ff==INF){
			if(lazy[id].ff==INF){
				tree[id].sum+=(r-l)*laz.ss;
				tree[id].mx+=laz.ss;
				lazy[id].ss+=laz.ss;
			}
			else{
				lazy[id].ff+=laz.ss;
				tree[id].mx=lazy[id].ff;
				tree[id].sum=lazy[id].ff*(r-l);
			}
		}
		else{
			tree[id].mx=laz.ff;
			tree[id].sum=(r-l)*laz.ff;
			lazy[id]=laz;
		}
	}

	inline void proh(ll id, ll l, ll r){
		ll mid=(l+r)>>1;
		updpro(lazy[id], id<<1, l, mid);
		updpro(lazy[id], id<<1|1, mid, r);
		lazy[id]={INF, 0};
	}

	inline void Upd(ll x, ll y, ii val, ll id, ll l, ll r){
		if(x>=r || y<=l) return;
		if(x<=l && r<=y){
			updpro(val, id, l, r);
			return;
		}
		proh(id, l, r);
		ll mid=(l+r)>>1;
		Upd(x, y, val, id<<1, l, mid);
		Upd(x, y, val, id<<1|1, mid, r);
		tree[id]=Op(tree[id<<1], tree[id<<1|1]);
	}
	inline T Que(ll x, ll y, ll id, ll l, ll r){
		if(x>=r || y<=l) {T ans; ans.clear(); return ans;};
		if(x<=l && r<=y) return tree[id];
		proh(id, l, r);
		ll mid=(l+r)>>1;
		T left, right;
		left=Que(x, y, id<<1, l, mid);
		right=Que(x, y, id<<1|1, mid, r);
		return Op(left, right);
	}
	inline void build1(ll id, ll l, ll r){
		if(l+1==r){
			tree[id].mx=ar[l];
			tree[id].sum=ar[l];
			return;
		}
		ll mid=(l+r)>>1;
		build1(id<<1, l, mid), build1(id<<1|1, mid, r);
		tree[id]=Op(tree[id<<1], tree[id<<1|1]);
	}
	inline void upd(ll l, ll r, ii val){
		Upd(l, r, val, 1, 0, n);
	}
	inline T que(ll l, ll r){
		return Que(l, r, 1, 0, n);
	}
	inline void build(){
		FER(i,0,n<<2) lazy[i]={INF, 0};
		build1(1, 0, n);
	}
}st[1<<2];

ll val[1<<18];

int main(){
	fastio;
	ll n, q, a, b; cin>>n>>q>>a>>b;
	st[0].n=2e5+1;
	st[1].n=2e5+1;
	val[0]=a;
	FER(i,1,q+1) cin>>val[i];
	FER(i,0,2e5+1){
		if(i==b){
			st[0].ar[i]=-i;
			st[1].ar[i]=i;
		}
		else{
			st[0].ar[i]=INF;
			st[1].ar[i]=INF;
		}
	}
	st[0].build();
	st[1].build();
	FER(i,1,q+1){
		ll nxt=val[i], last=val[i-1];
		ll l=st[0].que(0, nxt).mx, r=st[1].que(nxt, 2e5+1).mx;
		l+=nxt, r-=nxt;
		ll valor=min(l, r), add=abs(nxt-last);
		st[0].upd(last, last+1, {valor-last, 0});
		st[1].upd(last, last+1, {valor+last, 0});
		st[0].upd(0, last, {INF, add});
		st[0].upd(last+1, 2e5+1, {INF, add});
		st[1].upd(last+1, 2e5+1, {INF, add});
		st[1].upd(0, last, {INF, add});
	}
	ll ans=INF;
	FER(i,0,2e5+1){
		ll cur=st[1].que(i, i+1).mx-i;
		ans=min(ans, cur);
	}
	cout<<ans<<endl;
	return 0;
}

Measured memory_bytes: 96000