def       A	(    _lowercase = 1_000_000						):
						SCREAMING_SNAKE_CASE							:    Dict							=							set(range(3		,  _lowercase		,  2						)						)
						primes.add(2						)
						for p in range(3		,  _lowercase		,  2						):
												if p not in primes:
																		continue
												primes.difference_update(set(range(p * p		,  _lowercase		,  _lowercase						)						)						)

						SCREAMING_SNAKE_CASE							:    Optional[Any]							=							[float(_lowercase						) for n in range(limit + 1						)]

						for p in primes:
												for n in range(_lowercase		,  limit + 1		,  _lowercase						):
																		phi[n] *= 1 - 1 / p

						return int(sum(phi[2:]						)						)


if __name__ == "__main__":
					print(f"""{solution() = }""")






import pytest

import datasets.config
from datasets.utils.info_utils import is_small_dataset
@pytest.mark.parametrize('''dataset_size'''		,  [None, 400 * 2**20, 600 * 2**20]						)
@pytest.mark.parametrize('''input_in_memory_max_size'''		,  ['''default''', 0, 100 * 2**20, 900 * 2**20]						)
def       A	(    _lowercase		,  _lowercase		,  _lowercase						):
						if input_in_memory_max_size != "default":
												monkeypatch.setattr(datasets.config		,  '''IN_MEMORY_MAX_SIZE'''		,  _lowercase						)
						SCREAMING_SNAKE_CASE							:    Tuple							=							datasets.config.IN_MEMORY_MAX_SIZE
						if input_in_memory_max_size == "default":
												assert in_memory_max_size == 0
						else:
												assert in_memory_max_size == input_in_memory_max_size
						if dataset_size and in_memory_max_size:
												SCREAMING_SNAKE_CASE							:    str							=							dataset_size < in_memory_max_size
						else:
												SCREAMING_SNAKE_CASE							:    Union[str, Any]							=							False
						SCREAMING_SNAKE_CASE							:    Any							=							is_small_dataset(_lowercase						)
						assert result == expected





