1 cup warm whole milk (110-115°F)
2 tablespoons sugar
2 1/4 teaspoons active dry yeast (1 envelope)
3 1/2 cups all-purpose flour
2 teaspoons salt
2 tablespoons unsalted butter, at room temperature
In a large mixing bowl, combine the warm milk, sugar, and yeast. Stir gently until the yeast is dissolved and let the mixture sit for 5-10 minutes until it becomes frothy.
Add 2 cups of the flour and the salt to the yeast mixture, and stir until well combined.
Stir in the butter until it is well incorporated. Gradually add the remaining 1 1/2 cups flour, 1/2 cup at a time, until a soft dough forms.
Turn the dough out onto a lightly floured surface and knead for 6-8 minutes until it is smooth and elastic.
Place the dough in a greased bowl, cover with plastic wrap or a damp towel, and let it rise in a warm, draft-free place for 1-2 hours, or until it has doubled in size.
Preheat the oven to 350°F. Grease a 9×5 inch loaf pan.
Punch down the dough to release any air pockets and knead it briefly on a lightly floured surface.
Shape the dough into a loaf and place it in the prepared pan. Cover the pan with plastic wrap or a damp towel and let the dough rise again for 30-40 minutes.
Bake the bread for 30-35 minutes, or until it is golden brown and sounds hollow when tapped.
Remove the bread from the oven and let it cool for 10 minutes in the pan before transferring it to a wire rack to cool completely. Serve the bread warm or at room temperature.