Highway 31 is a slightly minor north-south highway through the Selkirk Mountains in British Columbia, Canada. The highway first gained its number in 1973, and it is one of the few numbered highways in the province that is not fully paved. Highway 31 has a total distance of 175 km (109 mi) — 37 km (23 mi) along Kootenay Lake between Balfour (a junction with Highway 3A) and Kaslo (a junction with Highway 31A), 106 km (66 mi) north along Kootenay Lake north of Kaslo, then the Duncan and Lardeau Rivers and the north shore of Trout Lake, and 32 km (20 mi) between the northwest end of Trout Lake and Galena Bay, where it ends at Highway 23.
The highway is a gravel road between Meadow Creek at the north end of Kootenay Lake and Trout Lake. Care should be taken when driving the route as it is narrow and has drop offs into Trout Lake north of Gerrard.