How to check if specific number of rows exists without count(*)
You can add this in the EXISTS subquery:
LIMIT 1 OFFSET (N-1)

In other words, the subqery first tries to finds (N-1) rows, skip them and return the next (Nth) row. So, it will return something (one row) if and only if there are N+ rows.
You need appropriate indexes, i.e. an index on B(id) in this case, to make it as fast as possible, obviously.