function swap(arr, i, j) {
    const temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

function heapify(arr, n, i) {
    if (i >= n) return;
    const c1 = 2 * i + 1;
    const c2 = 2 * i + 2;
    let largest = i;
    if (c1 < n && arr[c1] > arr[largest]) {
        largest = c1;
    }
    if (c2 < n && arr[c2] > arr[largest]) {
        largest = c2;
    }
    if (largest !== i) {
        swap(arr, i, largest);
        heapify(arr, n, largest);
    }
}

function buildHeap(arr, n) {
    const lastNode = n - 1;
    const lastParent = Math.floor((lastNode - 1) / 2);
    for (let i = lastParent; i >= 0; i--) {
        heapify(arr, n, i);
    }
}

function heapSort(arr, n) {
    buildHeap(arr, n);
    for (let i = n - 1; i >= 0; i--) {
        swap(arr, i, 0);
        heapify(arr, i, 0);
    }
}

function main(arr, n, m) {
    heapSort(arr, n);
    const list = arr.slice(0, m);
    console.log(list.join(' '));
}