#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <queue>
#include <cmath>
#define _for(i,a,b) for(int i=(a);i<(b);++i)
#define _rep(i,a,b) for(int i=(a);i<=(b);++i)
#define mem(a,b) memset((a),(b),sizeof(a))
using namespace std;
typedef long long LL;
inline int read_int(){
int t=0;bool sign=false;char c=getchar();
while(!isdigit(c)){sign|=c=='-';c=getchar();}
while(isdigit(c)){t=(t<<1)+(t<<3)+(c&15);c=getchar();}
return sign?-t:t;
}
inline LL read_LL(){
LL t=0;bool sign=false;char c=getchar();
while(!isdigit(c)){sign|=c=='-';c=getchar();}
while(isdigit(c)){t=(t<<1)+(t<<3)+(c&15);c=getchar();}
return sign?-t:t;
}
inline void write(LL x){
register char c[21],len=0;
if(!x)return putchar('0'),void();
if(x<0)x=-x,putchar('-');
while(x)c[++len]=x%10,x/=10;
while(len)putchar(c[len--]+48);
}
inline void space(LL x){write(x),putchar(' ');}
inline void enter(LL x){write(x),putchar('\n');}
const int MAXN=1e5+5;
int a[MAXN],b[MAXN<<1];
int main()
{
int n=read_int(),p=read_int(),A=0;
_for(i,0,n){
a[i]=read_int();
A=max(A,a[i]);
}
_for(i,0,n)
b[max(0,a[i]-(A-n))]++;
_for(i,1,n<<1)
b[i]+=b[i-1];
int st=1,en=n;
_rep(i,1,n){
while(b[st+(i-1)]<i)
st++;
}
_for(i,0,n){
while(b[en+i]-i>=p)
en--;
}
st+=(A-n),en+=(A-n);
if(st<=en){
enter(en-st+1);
_rep(i,st,en){
if(i!=st)
putchar(' ');
write(i);
}
}
else
enter(0);
return 0;
}