#include <bits/stdc++.h>

using namespace std;


int n,k;

vector<int> par;
vector<int> treesize;

vector<int> luu;


int findd(int a)
{
    if(a == par[a]) return a;
    return par[a] = findd(par[a]);
}

void unionn(int a, int b)
{
    a = findd(a);
    b = findd(b);
    par[a] = b;
    treesize[b] += treesize[a];
}


void nhap()
{
    cin >> n >> k; n++;
    par.resize(n,0);
    treesize.resize(n,1);
    for(int i = 0; i<n; i++) par[i] = i;

}

void process()
{
    luu.resize(n);
    for(int i = 0; i<n; i++) luu[i] = i;
    int l = 0; int r = n-1;
    while(k--){
        int val; cin >> val;
        if(val!= par[val]) val = findd(val);
        int pos = lower_bound(luu.begin() + l, luu.begin() + r + 1, val) - (luu.begin() + l);
        if(pos <= (r - l) /2){
            pos = l + pos;
            for(int i = 1; pos - i >=l; i++) unionn(pos-i, pos+i);
            l = pos;
        }else{
            pos = l + pos;
            for(int i = 1; pos + i <=r; i++) unionn(pos +i, pos - i);
            r = pos;
        }
    }
    cout << (r - l + 1) << endl;
    for(int i = l; i<=r; i++) cout << treesize[i] << ' ';
}

int main()
{
    freopen("bando.inp","r",stdin);
    freopen("bando.out","w",stdout);
    nhap();
    process();
    return 0;
}
