Prevent prefab from instantiating in each other

Hello I have a question about instantiating prefabs.
Context: I’m working on my first boss and as soon as the player gets in fase 1 “spikes” get instantiated at the players x value with a timer that counts down. If the timer is 0 the spikes gets instantiated again…
Timer:

void FixedUpdate()
    {
        if(m_IntervalTime <= 0)
        {
            Summoning();
            m_IntervalTime = m_SetIntervalTime;
        }
        else
        {
            m_IntervalTime -= Time.deltaTime;
        }
    }

Summoning function spikes gets instantiated at 0 and m_Otherspikes checks if there already is a spike that is instantiated earlier.

void Summoning()
    {
        m_instantiatedSpikes = Instantiate(m_Spikes, new Vector2(m_Player.transform.position.x, -7.8f), Quaternion.identity);
        m_instantiatedSpikes.GetComponent<Spikes>().player = m_Player;
        m_instantiatedSpikes.GetComponent<Spikes>().danjuke = gameObject;

        m_OtherSpikes = Physics2D.OverlapCircle(m_instantiatedSpikes.transform.position, m_DetectionArea, m_SpikesLayer);
        
        if(m_OtherSpikes)
        {
            InvokeRepeating("SpaceChecker", 0f, .01f);
        }
    }

If there is an overlap with the spikes Spacechecker function is called. But here is where it gets interesting I’m new to coding and I think a had a good idea of preventing the spikes from getting instantiated in each other. That if there is an overlap the NEW spike that is about to instantiated is moved to the left or right (based on players x value) as long as the spikes are overlapping each other.

void SpaceChecker()
    {
        if(m_Player.transform.position.x >= m_instantiatedSpikes.transform.position.x)
        {
            m_instantiatedSpikes.transform.position = new Vector2(m_instantiatedSpikes.transform.position.x + 1, m_instantiatedSpikes.transform.position.y);
        }
        if(m_Player.transform.position.x < m_instantiatedSpikes.transform.position.x)
        {
            m_instantiatedSpikes.transform.position = new Vector2(m_instantiatedSpikes.transform.position.x - 1, m_instantiatedSpikes.transform.position.y);
        }
        
        if(!m_OtherSpikes)
        {
            CancelInvoke();
            m_instantiatedSpikes.GetComponent<Spikes>().animator.enabled = true;
            m_instantiatedSpikes.GetComponent<Spikes>().spriteRen.enabled = true;
            return;
        }
    }

As you can see in this video its not working properly …

So my question is if my idea is possible or if there is a better way of doing this?

    void Start()
    {
        InvokeRepeating("Spawner", 0, m_intervalTime);
    }

    void Spawner()
    {
        Vector2 pos=new Vector2(m_Player.transform.position.x, -7.8f);
        if (!Physics2D.OverlapCircle(pos, m_DetectionArea, m_SpikesLayer)) // no spikes present?
        {
            GameObject spikes = Instantiate(m_Spikes, pos, Quaternion.identity);
            spikes.GetComponent<Spikes>().player = m_Player;
            spikes.GetComponent<Spikes>().danjuke = gameObject;
        }
    }