#include <bits/stdc++.h>
using namespace std;
int r[1013];
int p[1013];
int c[1013][1013];
int q[1013];
int d[1013];
bool used[1013];
vector<pair<int, int> > gr[1013];
void mkset(int v) {
  p[v] = v;
  r[v] = 0;
}
int get(int v) {
  int root = v;
  while (p[root] != root) {
    root = p[root];
  }
  int i = v;
  while (p[i] != i) {
    int j = p[i];
    p[i] = root;
    i = p[j];
  }
  return root;
}
void un(int a, int b) {
  a = get(a);
  b = get(b);
  if (a == b) return;
  if (r[a] == r[b]) {
    p[b] = a;
    r[a]++;
  } else if (r[a] < r[b]) {
    p[a] = b;
  } else {
    p[b] = a;
  }
}
int dfs(int v) {
  used[v] = true;
  int ans = 0;
  if (gr[v].size() == 0)
    return d[v];
  else
    for (int i = 0; i < gr[v].size(); i++) {
      if (!used[v]) {
        ans += dfs(gr[v][i].first);
      }
    }
  return ans;
}
set<int> st;
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    st.insert(x);
  }
  vector<int> ans;
  int an = 0, i = 1;
  while (m >= i) {
    if (st.find(i) != st.end()) {
      i++;
      continue;
    }
    an++;
    ans.push_back(i);
    m -= i;
    i++;
  }
  cout << an << endl;
  for (int j = 0; j < ans.size(); j++) {
    cout << ans[j] << ' ';
  }
  return 0;
}
