#include <iostream>
#include <vector>
#include <unordered_set>
#include <algorithm>
#include <limits>
 
using namespace std;
 
// Hàm tìm chỉ mục của lần sử dụng tiếp theo của một dụng cụ
// Bắt đầu tìm từ vị trí 'start_index'
// Trả về -1 nếu dụng cụ đó không được sử dụng lại nữa
int find_next_use(int tool_id, int start_index, const vector<int>& requests) {
    for (int j = start_index; j < requests.size(); ++j) {
        if (requests[j] == tool_id) {
            return j;
        }
    }
    return -1; // Không bao giờ được dùng lại
}
 
void solve() {
    // N: Kích thước cache (theo đề bài: N <= 1000)
    // k: Độ dài chuỗi yêu cầu (theo đề bài: k <= 20000)
    int N, k;
    if (!(cin >> N >> k)) return;
 
    // requests: Chuỗi yêu cầu dụng cụ a1, a2, ..., ak
    vector<int> requests(k);
    for (int i = 0; i < k; ++i) {
        cin >> requests[i];
    }
 
    // cache: Tập hợp các dụng cụ hiện có trong cache
    unordered_set<int> cache;
    int miss_count = 0;
 
    // Duyệt qua chuỗi yêu cầu
    for (int i = 0; i < k; ++i) {
        int current_tool = requests[i];
 
        // 1. Cache Hit (Dụng cụ có sẵn)
        if (cache.count(current_tool)) {
            continue;
        }
 
        // 2. Cache Miss (Dụng cụ chưa có)
        miss_count++;
 
        // 2a. Cache chưa đầy
        if (cache.size() < N) {
            cache.insert(current_tool);
        }
        // 2b. Cache đã đầy -> Phải thay thế
        else {
            int tool_to_remove = -1;
            // Chỉ số xa nhất của lần sử dụng tiếp theo
            int max_next_use = -1; // -1 đại diện cho việc không bao giờ dùng lại
 
            // Thuật toán Tham lam Tối ưu:
            // Chọn dụng cụ trong cache có lần sử dụng tiếp theo xa nhất (max_next_use lớn nhất)
            for (int tool : cache) {
                // Tìm lần sử dụng tiếp theo, bắt đầu từ vị trí i+1
                int next_use = find_next_use(tool, i + 1, requests);
 
                // Nếu dụng cụ không bao giờ được dùng lại (next_use == -1), 
                // thì nó là ứng viên tốt nhất để loại bỏ.
                if (next_use == -1) {
                    tool_to_remove = tool;
                    break; // Ưu tiên tuyệt đối, dừng tìm kiếm
                }
 
                // So sánh chỉ số lần dùng tiếp theo
                if (next_use > max_next_use) {
                    max_next_use = next_use;
                    tool_to_remove = tool;
                }
            }
 
            // Thực hiện thay thế
            if (tool_to_remove != -1) {
                cache.erase(tool_to_remove);
            }
            cache.insert(current_tool);
        }
    }
 
    // Kết quả là số lần thao tác (số lần Cache Miss)
    cout << miss_count << endl;
}
 
int main() {
    // Tối ưu hóa I/O
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
 
    solve();
 
    return 0;
}