#include <iostream>
#include <string>
#include <vector>
#include <queue>
using namespace std;

int n, m,i;

typedef pair<int, int> zamjena;

zamjena zamjene[100];
vector<int> niz;


struct stanje {
    int poteza;
    vector<int> niz;
    stanje() { };
    stanje(int i1, vector<int> i2) { poteza = i1; niz = i2; }
};

bool sorted(vector<int> niz) {
    int i;
    for(i=0; i<niz.size(); i++)
        if(niz[i] != i + 1) return false;
    return true;
}

void apply(vector<int>& niz, zamjena zam) {
    int t; t = niz[zam.first-1]; niz[zam.first-1] = niz[zam.second-1];
    niz[zam.second-1] = t; }


int explore(stanje start) {    
    queue<stanje> bfsq;
    bfsq.push(start);
       
    while(!bfsq.empty()) {
               stanje t = bfsq.front(); bfsq.pop();
    if(sorted(t.niz)) return t.poteza;
    
    for(int i=0; i<m; i++) {
        stanje t1(t.poteza+1,t.niz);
        apply(t1.niz, zamjene[i]);
        
        bfsq.push(t1);
    }

}


}

int main() {
   
    cin >> n >> m;    
    for(i=0; i<n; i++) {
        int t; cin >> t; niz.push_back(t); }
        
    for(i=0; i<m; i++) {
        int t1,t2; cin >> t1 >> t2; zamjene[i] = zamjena(t1,t2); }
        
        
    cout << explore(stanje(0,niz)) << endl;
    
    //system("pause");
}
        
    
