Repeated spawn point

Hello, I try to spawn chests on random spawn point. Also I need to check if this spawn point is free. First part works, but I have problems with second. Sometimes it spawns multiple chests at the same place in a row. Please help, here is my code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;

public class SpawnLootBox : MonoBehaviour
{
    public GameObject[] spawnPoints;
    private GameObject[] numberOfChest;
    public GameObject chest;

    private float countSeconds = 0;
    private int numberOfBoxesToSpawn;
    
    private SpawnPointNumber spawnPointNumber;
    public List<int> takenPlaces = new List<int>();
    private bool placeIsTaken;
    private int spawn;

    void Update()
    {
        if (countSeconds <= 0) 
        {
            countSeconds = Random.Range(1, 3);
            StartCoroutine(Wait(countSeconds));
        }
        
    }
    private IEnumerator Wait(float seconds)
    {
        yield return new WaitForSeconds(seconds);
        countSeconds = 0;
        numberOfBoxesToSpawn = Random.Range(1, 4);
        numberOfChest = GameObject.FindGameObjectsWithTag("Chest");
        while (numberOfBoxesToSpawn > 0 && numberOfChest.Length < 6)
        {
            SpawnBox();
            numberOfBoxesToSpawn--;
        }
    }
    private void SpawnBox()
    {
        spawn = Random.Range(0, spawnPoints.Length);
        CheckList();
        if (placeIsTaken == false)
        {
            GameObject newChest = GameObject.Instantiate(chest, spawnPoints[spawn].transform.position, Quaternion.identity);
            spawnPointNumber = newChest.GetComponent<SpawnPointNumber>();
            spawnPointNumber.spawnNumber = spawn;
            takenPlaces.Add(spawn);
        }
    }
    private void CheckList()
    {
        foreach (int i in takenPlaces)
        {
            if (i == spawn)
            {
                placeIsTaken = true;
                SpawnBox();
                break;
            }
        }
        placeIsTaken = false;
    }
   
}

Still don`t know where is the problem, help please.