#include <stdio.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, M;
    cin >> N >> M;

    string status;
    cin >> status;

    vector<vector<int>> adj(N + 1);
    for (int i = 0; i < M; i++) {
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }

    vector<bool> restricted(N + 1, false);

    // Step 1: Mark restricted safe rooms
    for (int i = 1; i <= N; i++) {
        if (status[i - 1] == 'I') {
            for (int nb : adj[i]) {
                if (status[nb - 1] == 'S') {
                    restricted[nb] = true;
                }
            }
        }
    }

    // Step 2: BFS from room 1 if safe and not restricted
    if (status[0] != 'S' || restricted[1]) {
        cout << 0 << "\n";
        return 0;
    }

    vector<bool> visited(N + 1, false);
    queue<int> q;
    q.push(1);
    visited[1] = true;

    int count = 0;
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        count++;

        for (int v : adj[u]) {
            if (!visited[v] && status[v - 1] == 'S' && !restricted[v]) {
                visited[v] = true;
                q.push(v);
            }
        }
    }

    cout << count << "\n";
    return 0;
}