// https://szkopul.edu.pl/problemset/problem/aPqgk8oaUsM4nB6FLjxehRPe/site/?key=statement
// OIG VI (2 etap)
#include <iostream>
constexpr int sizik = 1000 * 1001;
int curr = 0, local_maxi = 0;
int val[sizik];
int nym[sizik];
int main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int n, m;
std::cin >> n >> m;
for (int i = 0; i < m; i++) {
int a;
std::cin >> a;
if (a == n + 1) {
nym[++curr] = local_maxi;
} else {
if (val[a] < nym[curr]) {
val[a] = nym[curr] + 1;
} else {
val[a]++;
}
if (val[a] > local_maxi) {
local_maxi = val[a];
}
}
}
for (int i = 1; i <= n; i++) {
if (val[i] < nym[curr]) {
val[i] = nym[curr];
}
std::cout << val[i] << ' ';
}
return 0;
}