#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;

void build(int *seg, int *a, int start, int end, int node)
{
    if(start>end)
        return;
    if(start == end)
    {
        seg[node] = a[start];
        return;
    }
    int mid = (start+end)>>1;
    build (seg, a, start, mid, 2*node+1);
    build (seg, a, mid+1, end, 2*node+2);
    
    seg[node] = min(seg[2*node+1], seg[2*node+2]);
}

int query (int *seg, int l, int r, int start, int end, int node)
{
    if(r<start || end<l || l>r)
        return INT_MAX;
    if(start>=l && end<=r)
    {
        return seg[node];
    }
    int mid = (start+end)>>1;
    int q1 = query (seg, l, r, start, mid, 2*node+1);
    int q2 = query (seg, l, r, mid+1, end, 2*node+2);
    
    return min(q1,q2);
}

int main() 
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int n=0, q=0;
    cin>>n>>q;
    
    int sz = n<<2;
    int seg[sz]; int a[n];
    fill(seg, seg + sz, INT_MAX);
    
    for(int i=0; i<n; i++)
        cin>>a[i];
    vector < pair <int, int> > v(q+1); // derived range for each query {start, end}
    //fill (v.begin(), v.end(), {-1,-1});
    for(int i=0; i<=q; i++)
        v[i].first = v[i].second = -1;
    
    for(int i=0; i<n; i++)
    {
        if(v[a[i]].first == -1)
            v[a[i]].first = i;
        else
            v[a[i]].second = i;
    }
    
    for(int i=0; i<=q; i++)
    {
        if(v[i].first !=-1 && v[i].second == -1)
            v[i].second = v[i].first;
        //cout<<i<<" "<<v[i].first<<" "<<v[i].second<<endl;
    }
    
    build(seg, a, 0, n-1, 0);
    
    int flag = 0;
    for(int i=q; i>=0; i--)
    {
        if(v[i].first !=-1 && v[i].second != -1)
        {
            //cout<<v[i].first<<" "<<v[i].second<<endl;
            int qry = query(seg, v[i].first, v[i].second, 0, n-1, 0);
            //cout<<qry<<endl;
            if(i > qry && qry!=0)
            {
                cout<<"NO"<<endl; flag = 1; break;
            }
        }
    }
    if(flag == 0)
    {
        int z_flag =0;
        for(int i=0; i<n; i++)
        {
            if(a[i]==0)
            {
                int l=-1, r=-1, j=i+1;
                while(j<n)
                {
                    if(a[j]!=0)
                    {
                        r = j; break;
                    }
                    else
                        ++j;
                }
                j= i-1;
                while(j>=0)
                {
                    if(a[j]!=0)
                    {
                        l = j; break;
                    }
                    else
                        --j;
                }
                if( l==-1 && r==-1)
                {
                    z_flag=1; break;
                }
                else if(r==-1)
                {
                    for(j = l+1; j<n; j++)
                        a[j]=a[l];
                    break;
                }
                else if(l==-1)
                {
                    for(j= r-1; j>=0; j--)
                        a[j] = a[r];
                    i = r;
                }
                else if( r!=-1 && l!=-1)
                {
                    for(j = l+1; j<r; j++)
                        a[j]=a[r];
                    i=r;
                }
            }
        }
        //cout<<z_flag<<endl;
        cout<<"YES"<<endl;
        if(z_flag==1)
        {
            for(int i=0; i<n; i++)
                cout<<q<<" ";
            cout<<endl;
        }
        else
        {
            for(int i=0; i<n; i++)
                cout<<a[i]<<" ";
            cout<<endl;
        }
    }
	return 0;
}