#include <bits/stdc++.h>
using namespace std;
unsigned long long nCr(unsigned long long n, unsigned long long r) {
  if (r > n) return 0;
  unsigned long long k = r;
  if ((n - r) < r) k = (n - r);
  unsigned long long g = k;
  unsigned long long ans = 1;
  for (unsigned long long i = n; i >= n - k + 1; i--) {
    ans *= i;
    if (ans % g == 0) {
      ans /= g;
      g--;
    }
  }
  while (g >= 1) {
    ans /= g;
    g--;
  }
  return ans;
}
unsigned long long fact(unsigned long long n) {
  unsigned long long ans = 1;
  if (n == 0 || n == 1) return 1;
  for (unsigned long long i = 2; i <= n; i++) ans *= i;
  return ans;
}
unsigned long long derangement(unsigned long long n) {
  unsigned long long ans = 0;
  for (unsigned long long i = 0; i <= n; i++) {
    ans += pow(-1, i) * (fact(n) / fact(i));
  }
  return ans;
}
int32_t main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  unsigned long long n, m;
  cin >> n >> m;
  vector<unsigned long long> v(n);
  for (unsigned long long i = 0; i < n; i++) cin >> v[i];
  sort(v.begin(), v.end());
  vector<unsigned long long> a;
  unsigned long long ans = 0;
  for (unsigned long long i = 1;; i++) {
    if (!binary_search(v.begin(), v.end(), i)) {
      ans += i;
      a.push_back(i);
    }
    if (ans > m) break;
  }
  a.pop_back();
  cout << a.size() << "\n";
  for (unsigned long long i = 0; i < a.size(); i++) cout << a[i] << " ";
  return 0;
}
