import Control.Monad (replicateM)
import Data.Set as Set hiding (map, filter, foldl)
import Data.Map as Map hiding (map, filter, foldl)
import Data.Maybe

data Hoge = Hoge { hoge_f :: Map Int Int, hoge_m :: Map Int Int, hoge_s :: Map Int (Set Int) }

emptyHoge = Hoge { hoge_f = Map.empty, hoge_m = Map.empty, hoge_s = Map.empty }

lookupHoge :: Int -> Hoge -> Maybe (Int, Int, Set Int)
lookupHoge x h = case Map.lookup x (hoge_f h) of
    Nothing -> Nothing
    Just m_index -> Just (m_index, s_index, s)
        where
            s_index = fromJust $ Map.lookup m_index (hoge_m h)
            s       = fromJust $ Map.lookup s_index (hoge_s h)

unionHoge :: Int -> Int -> Int -> Set Int -> Set Int -> Hoge -> Hoge
unionHoge mi_y si_x si_y s_x s_y h = Hoge {
        hoge_f = (hoge_f h),
        hoge_m = Map.insert mi_y si_x (hoge_m h),
        hoge_s = Map.insert si_x (Set.union s_x s_y) $ Map.insert si_y Set.empty (hoge_s h)
    }

addElem :: Int -> Int -> Int -> Set Int -> Hoge -> Hoge
addElem e mi si s h = Hoge {
        hoge_f = Map.insert e mi (hoge_f h),
        hoge_m = (hoge_m h),
        hoge_s = Map.insert si (Set.insert e s) (hoge_s h)
    }

newPair :: (Int, Int) -> Hoge -> Hoge
newPair (x, y) h  = Hoge {
        hoge_f = Map.insert x new_mi $ Map.insert y new_mi (hoge_f h),
        hoge_m = Map.insert new_mi new_si (hoge_m h),
        hoge_s = Map.insert new_si new_s (hoge_s h)
    }
        where
            new_mi = 1 + Map.size (hoge_m h)
            new_si = 1 + Map.size (hoge_s h)
            new_s  = Set.fromList [x, y]

addPair :: Hoge -> (Int, Int) -> Hoge
addPair h p@(x, y) = case (lookupHoge x h, lookupHoge y h) of
    (Just (mi_x, si_x, s_x), Just (mi_y, si_y, s_y)) -> if si_x == si_y then h else unionHoge mi_y si_x si_y s_x s_y h
    (Just (mi_x, si_x, s_x), Nothing) -> addElem y mi_x si_x s_x h
    (Nothing, Just (mi_y, si_y, s_y)) -> addElem x mi_y si_y s_y h
    (Nothing, Nothing) -> newPair p h

equals :: [Int] -> [(Int, Int)] -> Int
equals l pairs = (length noNeedToMove) + (sum $ map countIn sets)
    where
        m = foldl addPair emptyHoge pairs
        noNeedToMove = filter (\(i,x)->i == x && Map.notMember x (hoge_f m)) $ zip [1..] l
        sets = Map.elems $ hoge_s m
        lmap = Map.fromList $ zip [1..] l
        countIn s = length $ filter isMember $ map at $ Set.toList s
            where
                at i = lmap Map.! i
                isMember x = Set.member x s

main = do
    [n, m] <- (map read . words) <$> getLine
    l <- (map read . words) <$> getLine
    pairs <- map (map read . words) <$> replicateM m getLine --  :: IO [[Int]]
    print $ equals l $ map (\[x,y]->(x,y)) pairs
