How to produce rolling count per minute?
If you want to update every second a one minute running average, you
have no choice but store in memory the counts you got the previous
60 seconds. You store them in a ring buffer, so that every new
reading replaces the oldest one. Then, every second:

you add to the CPM count the number of counts you got this second
you subtract the number of counts you got on the second that just got
out of the sliding window.

I would implement that logic this way:
const uint32_t ONE_SECOND = 1000;

uint16_t counts_per_minute;
uint16_t previous_counts[60];
size_t counts_pos;

void loop() {
    static uint32_t previous_second;
    if (millis() - previous_second &gt;= ONE_SECOND) {
        previous_second += ONE_SECOND;
        noInterrupts();
        uint16_t CNT_copy = CNT;
        interrupts();
        static uint16_t CNT_previous;
        uint16_t second_count = CNT_copy - CNT_previous;
        CNT_previous = CNT_copy;
        counts_per_minute += second_count - previous_counts[counts_pos];
        previous_counts[counts_pos] = second_count;
        if (++counts_pos &gt;= 60) counts_pos = 0;
    }
}

Note that:

The timing variable is updated with previous_second += ONE_SECOND
rather than previous_second = now in order to avoid the accumulation
of small timing errors.
The counter that is updated in the ISR has to be read only once,
with interrupts disabled. Otherwise the interrupt may change it while
you are in the middle of reading it.