#include
#include
#include
using namespace std;
struct node {
int index,najmal_pat;
node(int s,int p){
index = s;
najmal_pat = p;
}
bool operator < (const node&tmp) const {
return najmal_pat > tmp.najmal_pat;
}
};
int main() {
int n,v;
cin >> n >> v;
vector graph[15];
int niza[n];
for (int i = 0; i < n; i++) {
cin >> niza[i];
graph[niza[i]].push_back(i);
}
priority_queue pq;
vector visited (n+1, false);
vector portali(15, false);
pq.push(node(0,0));
while(!pq.empty()){
node current = pq.top();
pq.pop();
visited[current.index] = true;
if(current.index == n-1){
cout << current.najmal_pat;
break;
}
if(!portali[niza[current.index]]) {
for (int i = 0; i < graph[niza[current.index]].size(); i++) {
int sosed = graph[niza[current.index]][i];
int pat = current.najmal_pat + v;
if(!visited[sosed])
pq.push(node(sosed, pat));
}
portali[niza[current.index]] = true;
}
if(current.index > 0 and !visited[current.index - 1]){
pq.push(node(current.index -1,current.najmal_pat +1));
}
if(current.index < n and !visited[current.index + 1]){
pq.push(node(current.index +1,current.najmal_pat+1));
}
}
}