#include <bits/stdc++.h>
using namespace std;
const int inf = pow(10, 7);
const int max_len = 100500, max_alpha = 26;
int t[max_len][max_alpha];
int szT = 0;
int newT() { return ++szT; }
int n, k, root = 0;
char s[max_len];
bool win[max_len], lose[max_len];
void addTrie(string& s) {
  int len = s.length();
  int v = root;
  for (int i = 0; i < len; i++) {
    int c = s[i] - 'a';
    if (t[v][c] == 0) t[v][c] = newT();
    v = t[v][c];
  }
}
void dfs(int v) {
  bool isLeaf = true;
  win[v] = false, lose[v] = false;
  for (long long int i = 0; i < max_alpha; i += 1) {
    if (t[v][i]) {
      isLeaf = false;
      dfs(t[v][i]);
      win[v] |= !win[t[v][i]];
      lose[v] |= !lose[t[v][i]];
    }
  }
  if (isLeaf) {
    win[v] = false, lose[v] = true;
  }
}
int main() {
  int n, k;
  cin >> n >> k;
  string s;
  root = newT();
  for (long long int i = 0; i < n; i += 1) {
    cin >> s;
    addTrie(s);
  }
  dfs(root);
  if (win[root] == false)
    cout << "Second" << endl;
  else if (win[root] == true && lose[root] == true) {
    cout << "First" << endl;
  } else if (win[root] == true && lose[root] == false) {
    if (k % 2 == 1) {
      cout << "First" << endl;
    } else
      cout << "Second" << endl;
  }
  return 0;
}
