Drawing in one draw call vertex buffer with different programs

I am trying to figure out how to implement the following concept with modern OpenGL API (4.3)

I have a vertex buffer which has a regular vertex array.But I need half of its data to process with ShaderProgram A, and another half - with ShaderProgram B.

Currently what I do is creating two different VAOs with vertex attribute pointers pointing to related parts of the vertex array.But in this case I must issue 2 draw calls -one per VAO.

Can I do it with a single draw call?

P.S: I thought of primitive restart,but AFAIK it doesn’t switch shaders on each restart.