local par={}
local rank={}
local size={}

local function init(n)
    for i=1,n do
        par[i]=i
        rank[i]=1
        size[i]=1
    end
end

local function root(x)
    return par[x]==x and x or root(par[x])
end

local function same(x,y)
    return root(x)==root(y)
end

local function unite(x,y)
    x=root(x)
    y=root(y)
    if x==y then
        return
    end
    if rank[x]>rank[y] then
        par[x]=y
        size[y]=size[y]+size[x]
    else
        par[x]=y
        size[y]=size[y]+size[x]
        if rank[x]==rank[y] then
            rank[y]=rank[y]+1
        end
    end
end

local function getsize(x)
    return size[root(x)]
end

----------

local n,m=io.read("n","n")
init(n)

local p={}
for i=1,n do
    p[i]=io.read("n")
end

for i=1,m do
    local x,y=io.read("n","n")
    unite(x,y)
end

local counter=0
for i=1,n do
    if same(p[i],i) then
        counter=counter+1
    end
end
print(counter)