Auston Matthews, who did not score for the first time in nine games, extended his personal point streak to 11 with an assist for Toronto (11-2-1), which has a nine-game point streak (8-0-1).
"There were just periods in the game where they kind of put their foot on the gas and we were back on our heels, and vice versa," Matthews said. "So that's a good team over there all throughout their lineup. They've got a lot of depth, great goaltending, and they play really tight defensively. So I think it's a testament to our game tonight, just sticking with it and big goals by our guys, and hanging on at the end."
Josh Anderson and Tomas Tatar scored for Montreal (8-3-2), which has lost three of six since starting 5-0-2. Carey Price made 20 saves.
"I think today it was a disappointing loss because I don't think we were that bad," Canadiens forward Joel Armia said. "There's some areas we have to be better, and things like winning battles and staying strong on the puck, but I don't know what the reason is for that."