#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("unroll-loops")
using namespace std;
template <class A>
istream& operator>>(istream& in, vector<A>& a) {
  for (A& i : a) in >> i;
  return in;
}
template <class A>
istream& operator>>(istream& in, vector<vector<A>>& a) {
  for (auto& i : a)
    for (auto& j : i) in >> j;
  return in;
}
template <class A>
ostream& operator<<(ostream& in, vector<A>& a) {
  for (A& i : a) in << i << ' ';
  in << endl;
  return in;
}
template <class A>
ostream& operator<<(ostream& in, vector<vector<A>>& a) {
  for (auto& i : a) {
    for (auto& j : i) in << j << ' ';
    in << endl;
  }
  return in;
}
const long long mod = 1e9 + 7;
long long power(long long x, long long y) {
  long long res = 1;
  while (y > 0) {
    if (y & 1) res = (res * x) % mod;
    y >>= 1;
    x = (x * x) % mod;
  }
  return (res % mod);
}
void solve() {
  int n, m;
  cin >> n >> m;
  vector<int> v(n), ans;
  cin >> v;
  map<int, bool> mp;
  for (int i = 0; i < n; i++) {
    mp[v[i]] = true;
  }
  for (int i = 1; 1; i++) {
    if (mp[i] == 0 && m - i >= 0) {
      ans.push_back(i);
      m -= i;
      mp[i] = true;
    }
    if (m < i) {
      break;
    }
  }
  cout << ans.size() << "\n" << ans;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long tc = 1;
  for (long long t = 1; t <= tc; t++) {
    solve();
  }
}
