Mark Giordano had a goal and an assist for the Flames (19-21-3), who won the opener of a two-game set following a 3-2 overtime victory at the Toronto Maple Leafs on Tuesday.
It was the first of five games between the teams in 13 days. They will play here again Friday.
"I think we're pretty focused on how we have to play to beat Montreal," Calgary coach Darryl Sutter said. "We knew that last night we were going to have to check our [rear ends] off to try and win that game. We did, and I think that in the first period we came out and played really well."
Brett Kulak scored his first goal in two years for the Canadiens (18-13-9), who have lost four of five.
Montreal is in fourth place in the seven-team Scotia North Division, four points ahead of Calgary, which has played three more games. The top four teams will qualify for the Stanley Cup Playoffs.
"We're not looking for any excuses," Kulak said. "We know it was in our favor to come in and have the jump on them, and they played hard and it's that time of year. It's going to be tight all game and it's just the little things that are going to make the difference between winning or losing."
Jake Allen made 30 saves and is 1-4-0 in five straight starts with Carey Price out because of a lower-body injury.
"He battles and he comes ready to play, and I think he's given us great performances every time he's in the net," Kulak said.
The Flames took a 1-0 lead at 3:58 of the first period when Noah Hanifin scored off a face-off. Mikael Backlund drew the puck back to the left point, and Hanifin shifted to his right and beat Allen with a slap shot.