@Override
    public Integer next() {
        if (!hasNext()) {
            throw new NoSuchElementException();
        }
        int result = a * b;
        if (b++ == upperIncusive) {
            if (a++ == upperIncusive) {
                done = true;
            } else {
                b = a;
            }
        }
        return result;
    }