#include <stdio.h>
#include <time.h>
#include <memory.h>
#include <stdlib.h>

FILE* fout;


const int maxn = 1100000;
int a[maxn],ozn[maxn],d[maxn];


int rand(int n)
{
    return ((int)(rand()*1.0/RAND_MAX*n))%n + 1;   
}

double randD()
{
    return rand()*1.0/RAND_MAX;   
}

int rand2(int n)
{
    int x = rand(n);
    if (randD()>1.0/(ozn[x]+1))
       x = rand(n);
    ozn[x]++;
    return x;    
}

void generisi(int n,int m,int tip)
{
     
     int i,j,k;
     switch (tip)
     {
        case 0:    //1234512345123
             for(i = 0;i<m;i++)
                 a[i] = i%n + 1;                                              
             return;      
        case 1:
             for(i = 0;i<m;i++)       
                 a[i] = rand(n);                          
             return;                  
        case 2:
             memset(ozn,0,sizeof(ozn));
             for(i = 0;i<m;i++)       
                 a[i] = rand2(n);                                       
             return;
        case 3:                  
             for(i = 0;i<m;i++)
                 a[i] = i%n + 1;                                              
             int x,y,z;
             for(i = 1;i<m/5;i++)
             {
                x = rand(i)-1;
                y = rand(m)-1;      
                z = a[x];a[x]=a[y];a[y]=z;
             }
             return;      
             
     }     
}

void resi()
{
    //memset(ozn,0,sizeof(ozn));
    //memset(ozn,0,sizeof(a));
    //memset(ozn,0,sizeof(d));
    int start = clock();
    
    int n,m;
    scanf("%d%d",&n,&m);
    
    int i,j,k,t;
      
    for(i= 0;i<m;i++)
    {
       scanf("%d",&(a[i]));
       if (a[i]>n) printf("%d --- %d\n",i,a[i]);
       a[i]--;
    }
    memset(ozn,0,n*sizeof(ozn[0]));
    
    k = 1; t = 0;
    for(i = m-1;i>=0;i--)
    {
        d[i] = k; 
        if (ozn[a[i]]==0)
        {
            ozn[a[i]] = 1;
            t++;
            if (t==n)
            {               
               memset(ozn,0,n*sizeof(ozn[0]));
               t=0;
               k++;
            }            
        }     
    }
    
    int res = k;
    printf("%d\n",res);
    
    memset(ozn,0,n*sizeof(ozn[0]));
    for(i = 0;i<m;i++)
    {
       if (d[i]!=k)
       {
           for (j = 0;(j<n)&&(ozn[j]);j++);
           printf("%d\n",j+1);
           k--;
           if (k==0) break;
           for (;(i<m)&&(j!=a[i]);i++);
           memset(ozn,0,n*sizeof(ozn[0]));         
       }                 
       else ozn[a[i]]=1; 
    }
    
    if (k==1) 
    {
       for (j = 0;(j<n)&&(ozn[j]);j++);
       printf("%d\n",j+1);
    }        
        
    return;       
}


int main()
{   
    int tt;
    char file[15] = "podniz.__.in";    
    char fileO[15] = "podniz.__.out";
    srand(9901);

//               0 1  2   3  4   5   6    7    8    9    10    11    12    13     14     15     16      18      19      20    
    int n[20] = {2,2, 2,  2, 5,  5,298,   3,  10,5002, 1000,   10,    3,10000,  1000,  5000, 10000, 110000,     10,   1000};
    int m[20] = {4,5,15,100,20,100,300,1000,1000,5000,10000,50000,50000,50000,100000,200000,500000,1000000,1000000,1000000};
    int t[20] = {0,1, 1,  2, 0,  2,  3,   1,   1,   2,    3,    2,    1,    3,     1,     2,     3,      0,      1,      3};
    
    for(tt = 0;tt<20;tt++)
    {
        file[8]='0'+tt%10;
        file[7]='0'+tt/10;   
        fout = fopen(file,"w");
               
        generisi(n[tt],m[tt],t[tt]);
                    
        fprintf(fout,"%d %d\n",n[tt],m[tt]);
        int i;
        for(i = 0;i<m[tt];i++)
           fprintf(fout,"%d\n",a[i]);
        
        fclose(fout);
        
        fileO[8]='0'+tt%10;
        fileO[7]='0'+tt/10;           
        freopen(fileO,"w",stdout);
        freopen(file,"r",stdin);
        resi();        
    }
    return 0;
}
