code: @CanIgnoreReturnValue
    public boolean removeExactly(@Nullable Object element, int occurrences) {
      if (occurrences == 0) {
        return true;
      }
      CollectPreconditions.checkPositive(occurrences, "occurences");
  
      AtomicInteger existingCounter = Maps.safeGet(countMap, element);
      if (existingCounter == null) {
        return false;
      }
      while (true) {
        int oldValue = existingCounter.get();
        if (oldValue < occurrences) {
          return false;
        }
        int newValue = oldValue - occurrences;
        if (existingCounter.compareAndSet(oldValue, newValue)) {
          if (newValue == 0) {
            // Just CASed to 0; remove the entry to clean up the map. If the removal fails,
            // another thread has already replaced it with a new counter, which is fine.
            countMap.remove(element, existingCounter);
          }
          return true;
        }
      }
    }
docs: Removes exactly the specified number of occurrences of {@code element}, or makes no change if
  this is not possible.
  
  <p>This method, in contrast to {@link #remove(Object, int)}, has no effect when the element
  count is smaller than {@code occurrences}.
  
  @param element the element to remove
  @param occurrences the number of occurrences of {@code element} to remove
  @return {@code true} if the removal was possible (including if {@code occurrences} is zero)
  @throws IllegalArgumentException if {@code occurrences} is negative