#include<bits/stdc++.h>
using namespace std;
using ll=long long;
static const ll INF=1000000000000000;
ll n;
ll N,Q,A,B;
ll dp[4][200005];
ll dat[4][800010];
void init(ll n_){
n=1;while(n<=n_)n*=2;
  for(int i=0;i<4;i++)
    for(int j=0;j<2*n-1;j++)
      dat[i][j]=INF;
}
void update(ll w,ll k,ll a){
k+=n-1;
  if(dat[w][k]<=a)
    return;
  dat[w][k]=a;
  while(0<k){
  k=(k-1)/2;
    dat[w][k]=min(dat[w][2*k+1],dat[w][2*k+2]);
  }
    
}
ll query(ll w,ll a,ll b,ll k,ll l,ll r){
if(a<=l && r<=b)
  return dat[w][k];
  else if(r<=a || b<=l)
    return INF;
  else{
  ll val=query(w,a,b,2*k+1,l,(l+r)/2);
    ll var=query(w,a,b,2*k+2,(l+r)/2,r);
    return min(val,var);
  }

}
int main(){
  cin>>N>>Q>>A>>B;init(200001);
  vector<ll>x(Q+2);x[0]=A;x[1]=B;
  for(int i=2;i<=Q+1;i++)
    cin>>x[i];
  vector<ll>sum(Q+1);
  for(int i=0;i<=Q;i++)
    sum[i]=abs(x[i]-x[i+1]);
  for(int i=1;i<=Q;i++)
    sum[i]=sum[i]+sum[i-1];
  dp[0][0]=INF;dp[1][0]=INF;dp[2][0]=0;dp[3][0]=INF;
  update(0,A,dp[2][0]-sum[0]+A);
  update(1,A,dp[2][0]-sum[0]-A);
  for(int i=1;i<=Q;i++){
  dp[0][i]=min(dp[0][i-1],dp[1][i-1])+abs(x[i+1]-x[i]);
    dp[3][i]=min(dp[2][i-1],dp[3][i-1])+abs(x[i+1]-x[i]);
dp[1][i]=min(query(0,x[i+1],200004,0,0,n)-x[i+1],query(1,0,x[i+1],0,0,n)+x[i+1])+sum[i-1];
dp[2][i]=min(query(2,x[i+1],200004,0,0,n)-x[i+1],query(3,0,x[i+1],0,0,n)+x[i+1])+sum[i-1]; 
 update(0,x[i],dp[2][i]-sum[i]+x[i]);
    update(1,x[i],dp[2][i]-sum[i]-x[i]);
    update(2,x[i],dp[1][i]-sum[i]+x[i]);
    update(3,x[i],dp[1][i]-sum[i]-x[i]);
  }ll ans=INF;
  for(int i=0;i<4;i++)
    if(dp[i][Q]<ans)ans=dp[i][Q];
  cout<<ans<<endl;
  
  return 0;
}