How can I made my Arduino follow the time exactly?
Three things you can do - any combination of these is good, but the more the better:


Use an RTC module to keep more accurate track of the time.
Connect the Arduino to the internet and use NTP to get the exact time.
Use the time provided by GPS.


The RTC chip can keep track of time when there is no external power, using just a very small button cell.
The GPS and internet time are both very accurate.

Using either or both of those sources to set and maintain the correct time in the RTC chip is the best and most accurate way of keeping the right time on the Arduino.

To increase the accuracy of your existing method you should count seconds, not minutes.

Start by recording the current millis. When 1000 of them have passed you can increase your seconds.  Don't rely on millis() % 1000 since you may miss it whilst doing other things. Also don't rely on your millisecond counter check executing at exactly 1000ms intervals - work on the principle of "at least 1000ms" and move the next check to 1000ms from where it should have happened, not where it did happen.  This can help to combat some clock drift.

static unsigned long mscount = millis();

if (millis() - mscount &gt;= 1000) {
    mscount += 1000;
    seconds ++;
}


Then every 60 seconds you can increase your minutes:

if (seconds == 60) {
    seconds = 0;
    minutes ++;
}