SNP hold Banffshire and Buchan Coast but Tories close the gap