Oliver Kapanen, Phillip Danault and Jake Evans scored, and Jakub Dobes made 17 saves for Montreal (35-18-10), which is 7-1-3 in its past 11 games.
William Nylander scored and Joseph Woll made 30 saves for Toronto (27-27-11), which is on a 0-6-2 skid.
The Maple Leafs, who have not missed the Stanley Cup Playoffs since 2015-16, are at .500 for the first time since they were 15-15-5 following a 5-1 loss at the Dallas Stars on Dec. 21.
The Canadiens outshot Toronto 33-18, including 18-5 while taking a 2-0 lead in the first period.
Kapanen put Montreal up 1-0 at 4:46. After helping Ivan Demidov win a puck battle in the left corner, he went to the left of the net to take a pass from Alex Newhook before spinning to his right and putting a snap shot between Woll’s pads.
Danault made it 2-0 at 14:41. He beat Maple Leafs defenseman Morgan Rielly to a puck in front of the net and scored five-hole on Woll after Kaiden Guhle’s dump-in along the left boards took an odd bounce out of the left corner.
Nylander cut it to 2-1 at 14:33 of the second period. He drove to the net and put a return pass from Easton Cowan into a wide open left side of the net.
Evans outraced Cowan to get to a loose puck in the Maple Leafs’ zone before shooting it into an empty net with 28 seconds remaining for the 3-1 final.