思路就是找到是用最少的桥梁然后不走
#include<bits/stdc++.h>
#define ll long long
#define F(i,a,b) for(ll i=a;i<=b;i++)
#define R(i,a,b) for(ll i=a;i>=b;i--)
#define sc(a) scanf("%lld",&a)
#define ps(a) printf("%lld ",a)
#define pn(a) printf("%lld\n",a)
using namespace std;
const ll N=3e6+7;
ll n,m,a[N],s[N],ans;
inline ll dis(ll i,ll j){
ll a=labs(i-j),b=labs(i+n-j);
if(a<b){
return 1ll;
}
else{
return 0ll;
}
}
int main(){
sc(n),sc(m);
F(i,1,m) sc(a[i]);
F(i,2,m){
ll b=min(a[i],a[i-1]),c=max(a[i],a[i-1]);
if(dis(b,c)==1ll){
s[b]++,s[c+1]--;
}
else{
s[1]++,s[b+1]--;
s[c]++,s[n+1]--;
}
}
ll minn=1e18;
F(i,1,n) s[i]+=s[i-1],minn=min(minn,s[i]);
ll ans=0;
F(i,1,n){
if(minn==s[i]){
F(j,2,m){
ll b=min(a[j],a[j-1]),c=max(a[j],a[j-1]);
if(dis(b,c)==1ll){
if(i>=b&&i<c){
ans+=labs(b+n-c);
}
else{
ans+=labs(b-c);
}
}
else{
if((i<b&&i>=1)||(i<=n&&i>=c)){
ans+=labs(b-c);
}
else{
ans+=labs(b+n-c);
}
}
}
break;
}
}
pn(ans);
return 0;
}