Faits : A. X._ (la bailleresse), Z._ et Y._ (les locataires) ont conclu un contrat de bail à loyer portant sur la location à usage d'habitation d'un appartement de cinq pièces situé au 2ème étage de l'immeuble sis boulevard..., à Genève. Le contrat était conclu pour une durée d'un an, du 1 er septembre 2014 au 31 août 2015, puis renouvelable tacitement d'année en année, sauf résiliation signifiée trois mois avant l'échéance. Par avis du 18 mars 2015, la bailleresse a résilié le bail pour le 31 août 2015. Dans la lettre accompagnant l'avis de résiliation, la bailleresse indique mettre un terme au contrat pour sa prochaine échéance contractuelle; par ailleurs, elle somme les locataires de cesser l'activité exercée dans l'appartement sous la forme d'un "salon de massage" et leur fixe un délai au 30 avril 2015 pour réintégrer les locaux, à défaut de quoi le bail sera résilié conformément à l'art. 257f CO. B. B.a. Le 20 avril 2015, les locataires ont saisi la Commission de conciliation puis, le 1 er juillet 2015, le Tribunal des baux et loyers du canton de Genève d'une requête tendant à ce que le congé du 18 mars 2015 soit déclaré inefficace, à ce qu'ils puissent ainsi habiter dans le logement concerné, subsidiairement à ce que ce congé soit annulé et, plus subsidiairement encore, à l'octroi d'une prolongation de bail. B.b. Le 12 mai 2015, les locataires étaient toujours formellement domiciliés à d'autres adresses que celle de l'appartement en cause. Par avis du 13 mai 2015, la bailleresse a résilié le bail pour le 30 juin 2015; elle se fondait sur l'art. 257f CO et l'avertissement du 18 mars 2015. B.c. Le 18 juin 2015, les locataires ont derechef saisi la Commission de conciliation puis, le 20 septembre 2015, le Tribunal des baux et loyers d'une requête tendant à ce que la résiliation du 13 mai 2015 soit annulée, respectivement déclarée inefficace. Les deux causes ont été jointes. Par jugement du 24 mai 2016, le Tribunal des baux et loyers a déclaré valable le congé du 13 mai 2015, dit que la contestation relative au congé du 18 mars 2015 devenait sans objet et débouté les parties de toutes autres conclusions. Par arrêt du 16 janvier 2017, la Chambre des baux et loyers de la Cour de justice du canton de Genève a rejeté l'appel déposé par les locataires et a confirmé le jugement du 24 mai 2016. C. Z._ et Y._ interjettent un recours en matière civile. Ils demandent au Tribunal fédéral de constater la nullité du congé extraordinaire du 13 mai 2015 et de déclarer le congé du 18 mars 2015 contraire aux règles de la bonne foi, subsidiairement de prolonger le bail, plus subsidiairement de renvoyer la cause à la cour cantonale pour nouveau jugement dans le sens des considérants. X._ conclut au rejet du recours. Par ordonnance du 12 avril 2017, la Présidente de la cour de céans a rejeté la requête d'effet suspensif formée par les recourants. Dans un arrêt rendu parallèlement dans la cause 4G_1/2017, le Tribunal fédéral a déclaré irrecevable la demande d'interprétation déposée par l'intimée contre cette ordonnance.