def get_tile_type(index_i, index_j, tile_arrangement):
    """
    Gets the tile type at (`index_i`, `index_j`).

    Args:
        index_i (int):
            Row index.
        index_j (int):
            Column index.
        tile_arrangement (List[List[str]]):
            Arrangement of the tiles as a 2D grid.

    Returns:
        str:
            The type of tile, chosen from the list ["Occupied", "Free", "Floor"].
    """

    # Validate inputs
    if not (0 <= index_i <= len(tile_arrangement) - 1):
        raise IndexError
    if not (0 <= index_j <= len(tile_arrangement[0]) - 1):
        raise IndexError

    # Check occupancy
    if tile_arrangement[index_i][index_j] == "#":
        return "Occupied"
    elif tile_arrangement[index_i][index_j] == "L":
        return "Free"
    else:
        return "Floor"