- 2 pounds russet (baking) potatoes, peeled and cut into 1-inch pieces
- 1 1/4 cups whole milk, divided
- 1 stick (8 tablespoons) unsalted butter, divided
- 4 ounces coarsely grated Swiss or Gruyère (about 1 cup packed)
- 1/4 teaspoon freshly ground black pepper
- 1 (2- to 2 1/2-pound) head cauliflower, cut into 1 1/2-inch pieces, including stems and core
- 3 garlic cloves, peeled and smashed
- 3/4 to 1 cup grated Parmigiano-Reggiano, divided
Put potatoes and 2 teaspoons salt in a large heavy saucepan and generously cover with cold water (about 2 1/2 quarts). Bring to a boil, then reduce heat, and simmer, partially covered, until potatoes are tender, 15 to 20 minutes.
While potatoes are boiling, heat 3/4 cup milk and 3 tablespoons butter in a small saucepan until butter is melted and milk is hot but not boiling. Keep warm off heat, covered.
Drain potatoes well in a sieve or colander and return to hot saucepan. Add milk mixture, Fontina, and pepper, and mash with a potato masher or fork to desired consistency. Season with salt and keep warm, covered.
Bring a pot of well-salted water to a boil, then add cauliflower and garlic and simmer until cauliflower is very tender, 13 to 15 minutes.
Drain cauliflower in a colander and pulse with remaining 1/2 cup milk, 1/2 cup Parmigiano-Reggiano, and 3 tablespoons butter in a food processor until it's a chunky purée.
Stir together mashed potatoes and cauliflower mixture in a large bowl and season with salt and pepper. Transfer to a buttered 3-quart flameproof shallow baking dish (not glass).
Heat oven to 425°F with rack in middle. Melt remaining 2 tablespoons butter and gently brush over potato-cauliflower mixture, then sprinkle evenly with remaining 1/4 to 1/2 cup Parmigiano-Reggiano (to taste). Bake until potato mixture bubbles around edges, about 20 minutes.
Turn on broiler and broil 6 to 8 inches from heat until topping is browned in spots, 1 to 2 minutes.