#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int MAXN = 100010;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long i, j, k, u, n, m, t, x, z, v, cnt, a[1000005], y, tot = 0, maxx, ans,
                                                            minn, flag;
string len;
queue<long long> que;
vector<long long> vx;
map<long long, long long> mp;
int main() {
  cin >> n >> m;
  for (i = 1; i <= n; i++) {
    cin >> a[i];
    mp[a[i]] = 1;
  }
  ans = 0;
  for (i = 1; i <= n; i++)
    if (!mp[a[i] - 1] || !mp[a[i] + 1]) que.push(a[i]);
  while (!que.empty()) {
    long long now = que.front();
    que.pop();
    if (!mp[now - 1]) {
      mp[now - 1] = mp[now] + 1;
      ans += mp[now];
      if (!mp[now - 2]) que.push(now - 1);
      vx.push_back(now - 1);
      m--;
    }
    if (!m) break;
    if (!mp[now + 1]) {
      mp[now + 1] = mp[now] + 1;
      ans += mp[now];
      if (!mp[now + 2]) que.push(now + 1);
      vx.push_back(now + 1);
      m--;
    }
    if (!m) break;
  }
  cout << ans << endl;
  for (auto i : vx) cout << i << " ";
  return 0;
}
